How to find the indeces of same values within two vectors with repetitive values?
조회 수: 77 (최근 30일)
이전 댓글 표시
Hi all,
I've got two vectors:
A=[1000 2000 2000 5000 20000 20000];
B=[1000 2000 2000 5000 10000 20000 20000 60000 60000 60000 60000 0 0 0 0 0 0 0 0 0 0 0 0 0];
and I want to find the indeces of the elements of B that appears also in A.
I've tried this:
[~,idx]=ismember(A,B);
and it gives me idx=[1 2 2 4 6 6] but I want idx to be [1 2 3 4 6 7].
The problem is given by the repetitive values but I don't know how to fix it. Any ideas? Thanks in advance.
댓글 수: 0
채택된 답변
Stephen23
2020년 5월 13일
편집: Stephen23
2020년 5월 13일
The example data from your question:
>> A = [1000,2000,2000,5000,20000,20000];
>> B = [1000,2000,2000,5000,10000,20000,20000,60000,60000,60000,60000,0,0,0,0,0,0,0,0,0,0,0,0,0];
>> X = A(:)==B; % requires MATLAB >=R2016b, for earlier versions replace == with BSXFUN.
>> [~,Y] = find(X & cumsum(X,2)==cumsum(X,1))
Y =
1
2
3
4
6
7
>> A = [500,500,5000];
>> B = [250,500,500,1250,2500,5000,5000,15000,15000,15000,15000,8166,8926,9796,10800,11967,13333,14948,16875,16875,19200,22041,22041,25562];
>> X = A(:)==B; % requires MATLAB >=R2016b, for earlier versions replace == with BSXFUN.
>> [~,Y] = find(X & cumsum(X,2)==cumsum(X,1))
Y =
2
3
6
댓글 수: 2
추가 답변 (2개)
Mario Malic
2020년 5월 13일
Values=ismember(B,A) % Will return true/false for each value of B found in A
Ind_Values = Values .* [1:1:length(B)] % Multiply it by a vector to get actual indices from B
Ind_Values = nonzeros(Ind_Values)' % Remove zeros
Certainly, there is more elegant way to do this.
댓글 수: 3
Mario Malic
2020년 5월 13일
편집: Mario Malic
2020년 5월 13일
Akihumi's answer is great. Maybe you can add if condition to his code to remove extra numbers?
Another suggestion is a function intersect, but it requires that matrix A does not have the same values, otherwise it will not work as you want.
[C,ia,ib] = intersect(A,B) %ib contains indices in B
참고 항목
카테고리
Help Center 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!