Comparing more than two columns of a matrix using '<' or '>' symbol
조회 수: 1 (최근 30일)
이전 댓글 표시
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
댓글 수: 0
채택된 답변
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
추가 답변 (3개)
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
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
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
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
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))
참고 항목
카테고리
Help Center 및 File Exchange에서 Linear Algebra에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!