Square matrix with relationships among equal rows.

조회 수: 1 (최근 30일)
GEORGIOS BEKAS
GEORGIOS BEKAS 2017년 10월 26일
댓글: Cedric 2017년 10월 27일
I have a matrix with the following form:
A = [ 9 9 9; 5 6 5; 9 9 9; 4 4 2; 5 6 5; 5 6 5; 4 4 4; 9 9 9]
If a particular row is equal to another, I am searching for a square matrix that contains ones, when a particular row is equal to another. Therefore if row 3 is equal to row 1, I want the elements B(1,3) and B(3,1) of a new matrix B, to be equal to 1.

채택된 답변

Andrei Bobrov
Andrei Bobrov 2017년 10월 26일
B = ~squareform(pdist(A));
  댓글 수: 2
Jos (10584)
Jos (10584) 2017년 10월 27일
nice one, Andrei! +1
Andrei Bobrov
Andrei Bobrov 2017년 10월 27일
Thank you, Jos!

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

추가 답변 (2개)

Jos (10584)
Jos (10584) 2017년 10월 26일
편집: Jos (10584) 2017년 10월 26일
Use ismember to loop through the rows of A, and work backwards to induce automatic pre-allocation. Note that the diagonal contains 1s as well.
A = [ 9 9 9; 5 6 5; 9 9 9; 4 4 2; 5 6 5; 5 6 5; 4 4 4; 9 9 9];
B = [] ;
for k=size(A,1):-1:1
B(ismember(A,A(k,:),'rows'),k) = 1 ;
end

Cedric
Cedric 2017년 10월 26일
편집: Cedric 2017년 10월 26일
B = all(permute(A, [1,3,2]) == permute(A, [3,1,2]), 3) ;
and if you have a version of MATLAB < R2016b:
B = all(bsxfun(@eq, permute(A, [1,3,2]), permute(A, [3,1,2])), 3) ;
  댓글 수: 2
Andrei Bobrov
Andrei Bobrov 2017년 10월 27일
+1. My favorite "plows"!
Cedric
Cedric 2017년 10월 27일
Thank you Andrei :)

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

카테고리

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