Find common elements between two vectors and extract data from matrix (vectorized)

조회 수: 26 (최근 30일)
Hello,
I understand this is different question than the one answered in
I need to find elements of one small vector into a big vector, and based on that generate a new vector (same size as big vector) using elements of a matrix.
%A is 4x1
A =[1, 6, 5'] %%elements are different
%B is much larger, 6x1
B =[5 5 1 1 1 6 ]'
%A2 is
A2=[101, 501, 601;
102, 502, 602;
103, 503, 603]
% BBB is same dim as B, but using elements from A2
%ANSWER SHOULD BE:
BBB=[501 502 101 102 103 601]'
Using
[~,X]=ismember(B,A) %[~, ~, Xb]=unique(B) brings same result
Does not bring the correct location of columns in A2. Using
A=sort(A)
[~,X]=ismember(B,A)
does bring the correct location of columns in A2.
But how do I extract the rows?
  댓글 수: 8
Guillaume
Guillaume 2019년 2월 4일
Why isn't it
BBB = [601 %first element of B is 5, which is 3rd element of A, hence element (3, 1) of A2
602 %5 -> (3, 2)
101 %1 -> (2, 1)
102 %1 -> (2, 2)
103 %1 -> (2, 3)
501 %6 , 2nd element of A, hence (2, 1
]
Dave
Dave 2019년 2월 4일
Hi, thanks. A2 is not transposed. Element (row,col) (3,1) in A2 is 103 and not 601.
You can take A as sorted, say As=sort(A)

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

채택된 답변

Andrei Bobrov
Andrei Bobrov 2019년 2월 4일
편집: Andrei Bobrov 2019년 2월 4일
A3 = fix(A2.*(10.^-floor(log10(A2))));
[ii,~] = find(squeeze(all(A3==reshape(B,1,1,[]))));
[~,~,c] = unique(ii,'stable');
jj = cell2mat(arrayfun(@(x)(1:x)',accumarray(c,1),'un',0));
out = A2(sub2ind(size(A2),jj,ii));
  댓글 수: 4
Andrei Bobrov
Andrei Bobrov 2019년 2월 4일
Yes, if B =[2 2 1 1 1 3]';
solution:
[~,~,c] = unique(B,'stable');
jj = cell2mat(arrayfun(@(x)(1:x)',accumarray(c,1),'un',0));
out = A2(sub2ind(size(A2),jj,B));
Dave
Dave 2019년 2월 4일
Thanks a lot. Leaving the original B, I get ii
[~,ii] = ismember(B,sort(A))
and use the ii in
A2(sub2ind(size(A2),jj,ii));

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

추가 답변 (2개)

Dilo
Dilo 2022년 10월 30일
1+2

Dilo
Dilo 2022년 10월 30일
if true
% code
end

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by