How to construct a binary matrix reporting 1 in case of equal rows of two arrays of different dimensions?
Mostra commenti meno recenti
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 Commenti
Image Analyst
il 6 Ago 2014
Why the fear of looping for such a nano-sized matrix? Too much caffeine?
MRC
il 6 Ago 2014
Risposta accettata
Più risposte (1)
Chris Turnes
il 6 Ago 2014
Modificato: Chris Turnes
il 6 Ago 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.
Categorie
Scopri di più su Resizing and Reshaping Matrices in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!