필터 지우기
필터 지우기

Comparing more than two columns of a matrix using '<' or '>' symbol

조회 수: 3 (최근 30일)
pavikirthi
pavikirthi 2015년 10월 26일
댓글: pavikirthi 2015년 10월 26일
How to compare more than two columns of a matrix using '<' or '>' symbol?
For example, if I have a matrix A and if I compare the columns using '<' symbol
A=
2 5 4
4 1 2
6 0 1
7 5 8
I should get the output as
1 0 0
0 1 0
0 1 0
0 1 0
So, is there any solution that doesn't restrict for any two columns or three columns but in general more than two columns

채택된 답변

Guillaume
Guillaume 2015년 10월 26일
There is only ever one number per row that is smaller than all the other columns, and that is the minimum of the row. Hence, use min:
A = [2 5 4; 4 1 2; 6 0 1; 7 5 8];
[~, col] = min(A, [], 2);
B = zeros(size(A));
B(sub2ind(size(A), 1:size(A, 1), col')) = 1
  댓글 수: 1
pavikirthi
pavikirthi 2015년 10월 26일
Thanks, it absolutely works fine for any number of columns.

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

추가 답변 (3개)

Steven Lord
Steven Lord 2015년 10월 26일
Take a look at the second output of the MIN function.
A = [2 5 4; 4 1 2; 6 0 1; 7 5 8];
[~, index] = min(A, [], 2)
Then use either a FOR loop or SUB2IND to fill in the appropriate elements in your output matrix.
  댓글 수: 1
Stephen23
Stephen23 2015년 10월 26일
>> A = [2 5 4; 4 1 2; 6 0 1; 7 5 8];
>> [~,idx] = min(A,[],2);
>> X = false(size(A));
>> X(sub2ind(size(A),1:size(A,1),idx.')) = true
X =
1 0 0
0 1 0
0 1 0
0 1 0

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


Lessmann
Lessmann 2015년 10월 26일
Hi,
you can achieve this by using
B = diff(-A,1,2) < 0
You have to concatenate a column of zeros, so that A and B are of equal size.
  댓글 수: 1
Thorsten
Thorsten 2015년 10월 26일
That's only valid if you want to restrict your comparison to adjacent columns. In the example, column 1 is not compared to 3.

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


Thorsten
Thorsten 2015년 10월 26일
A = [2 5 4
4 1 2
6 0 1
7 5 8];
pairs = nchoosek(1:size(A,2), 2)
X = cell2mat(arrayfun(@(i)( A(:, pairs(i,1)) < A(:,pairs(i,2))), 1:3, ...
'UniformOutput', false))
  댓글 수: 1
pavikirthi
pavikirthi 2015년 10월 26일
Thanks. But, I want to compare whether column 1 elements are '<' column 2 and column 3 and similarly column 2 elements are '<' column 1 and column 3 and lastly column 3 elements are '<' column 1 and column 2.
I want to perform this operation in general with any number of columns. So, for this example of 3 column matrix I should get the output as
1 0 0
0 1 0
0 1 0
0 1 0

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

카테고리

Help CenterFile Exchange에서 Numeric Types에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by