Make matrix from input size
1 次查看(过去 30 天)
显示 更早的评论
I have an input of zeros n x n and I would like to output a matrix with an index like this:
function [ out ] = test3( mat )
[r c]= size(mat)
end
for input [0 0 0; 0 0 0] output [1 1; 1 2; 1 3; 2 1; 2 2; 2 3]
for input [0 0 0 0; 0 0 0 0; 0 0 0 0] output [1 1; 1 2; 1 3; 1 4; 2 1; 2 2; 2 3; 2 4; 3 1; 3 2; 3 3; 3 4]
and so on for all size of 0 matrix input. I tried something like
out=[1:r 1:c]
But I get the wrong output. How can I achieve something like this?
0 个评论
采纳的回答
Stephen23
2015-5-30
编辑:Stephen23
2015-5-30
>> mat = zeros(2,3)
mat =
0 0 0
0 0 0
>> [R,C] = ind2sub(size(mat),1:numel(mat));
>> [R;C]'
ans =
1 1
2 1
1 2
2 2
1 3
2 3
And use sortrows if you really need that exact order:
>> sortrows([R;C]')
ans =
1 1
1 2
1 3
2 1
2 2
2 3
Note that in MATLAB there are three main ways of indexing, and using subscript indices is not the most efficient: logical indexing is usually the fastest indexing method.
0 个评论
更多回答(2 个)
James Tursa
2015-5-30
编辑:James Tursa
2015-5-30
doc ndgrid
Look at combining the results with your 1:r and 1:c inputs.
EDIT:
Using your two inputs of 1:r and 1:c, it appears you want to get all combinations of pairs of them. So ndgrid can be used to do this.
[X,Y] = ndgrid(1:r,1:c);
out = [X(:) Y(:)];
The (:) notation turns a variable into a column vector.
4 个评论
Walter Roberson
2015-5-30
Then you aren't using a nested for. A nested for is like
for J = 1 : 17
for K = 53 : 88
...
end
end
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!