Square matrix with relationships among equal rows.

1 vue (au cours des 30 derniers jours)
GEORGIOS BEKAS
GEORGIOS BEKAS le 26 Oct 2017
Commenté : Cedric le 27 Oct 2017
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.

Réponse acceptée

Andrei Bobrov
Andrei Bobrov le 26 Oct 2017
B = ~squareform(pdist(A));
  2 commentaires
Jos (10584)
Jos (10584) le 27 Oct 2017
nice one, Andrei! +1
Andrei Bobrov
Andrei Bobrov le 27 Oct 2017
Thank you, Jos!

Connectez-vous pour commenter.

Plus de réponses (2)

Jos (10584)
Jos (10584) le 26 Oct 2017
Modifié(e) : Jos (10584) le 26 Oct 2017
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 le 26 Oct 2017
Modifié(e) : Cedric le 26 Oct 2017
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 commentaires
Andrei Bobrov
Andrei Bobrov le 27 Oct 2017
+1. My favorite "plows"!
Cedric
Cedric le 27 Oct 2017
Thank you Andrei :)

Connectez-vous pour commenter.

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by