How to construct a binary matrix reporting 1 in case of equal rows of two arrays of different dimensions?
Afficher commentaires plus anciens
Hi, I have a matrix nxk
A=[ 1 2; 3 4; 5 6; 7 8]
and a matrix B mxk (m can be > = or < n)
B=[ 2 3; 4 5; 1 2; 5 6; 10 23; 7 8]
Each row of B is different.
I want to construct a matrix C nxm in which the hi-th element is 1 if A(h,:)=B(i,:), i.e.
C=[0 0 1 0 0 0; 0 0 0 0 0 0; 0 0 0 1 0 0; 0 0 0 0 0 1];
without looping.
2 commentaires
Image Analyst
le 6 Août 2014
Why the fear of looping for such a nano-sized matrix? Too much caffeine?
MRC
le 6 Août 2014
Réponse acceptée
Plus de réponses (1)
Chris Turnes
le 6 Août 2014
Modifié(e) : Chris Turnes
le 6 Août 2014
One way to do this without looping would be to exploit the property that two vectors w and v are equal if and only if

Using this, you could construct each term and compare:
>> IP = A*B.';
>> An = sum(abs(A).^2, 2); % abs only necessary if data is complex
>> Bn = sum(abs(B).^2, 2);
>> C = (IP == An*ones(1, length(Bn))) & (IP == ones(length(An), 1)*Bn.');
This is a way of vectorizing the operation, but it will use much more memory than looping would.
Catégories
En savoir plus sur Resizing and Reshaping Matrices dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!