How to construct a binary matrix reporting 1 in case of equal rows of two arrays of different dimensions?
이전 댓글 표시
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
Image Analyst
2014년 8월 6일
Why the fear of looping for such a nano-sized matrix? Too much caffeine?
MRC
2014년 8월 6일
채택된 답변
추가 답변 (1개)
Chris Turnes
2014년 8월 6일
편집: Chris Turnes
2014년 8월 6일
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.
카테고리
도움말 센터 및 File Exchange에서 Resizing and Reshaping Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!