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!