필터 지우기
필터 지우기

Make matrix from input size

조회 수: 1 (최근 30일)
Millone
Millone 2015년 5월 30일
댓글: Stephen23 2015년 5월 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?

채택된 답변

Stephen23
Stephen23 2015년 5월 30일
편집: Stephen23 2015년 5월 30일
If you want all pairs of subscript indices, then you can use ind2sub:
>> 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.

추가 답변 (2개)

James Tursa
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
Millone
Millone 2015년 5월 30일
Thanks a lot. But for input [0 0; 0 0] I should have 1 1; 1 2; 2 1; 2 2 and I get instead 1 1; 1 2; 1 3; 1 4;
Walter Roberson
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

댓글을 달려면 로그인하십시오.


Andrei Bobrov
Andrei Bobrov 2015년 5월 30일
sortrows(fullfact(size(mat)),1)
  댓글 수: 1
Stephen23
Stephen23 2015년 5월 30일
+1 An excellent solution.
Note that fullfact requires the Statistics Toolbox.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by