Find multiple elements in an array.

441 次查看(过去 30 天)
I have an array a = [1 5 2 5 3 5 4 5]. I have a second array b = [2,3,4].
I want to type something like c = find(a == b), but Matlab doesn't like it that the dimensions don't agree. The answer I am looking for is c = [3,5,7].
I know I could do it with a for loop. Trying to avoid a for loop for speed concerns. Any help would be appreciated.

采纳的回答

Image Analyst
Image Analyst 2012-3-20
Use ismember:
a = [1 5 2 5 3 5 4 5]
b = [2,3,4]
% Give "true" if the element in "a" is a member of "b".
c = ismember(a, b)
% Extract the elements of a at those indexes.
indexes = find(c)
Results:
a =
1 5 2 5 3 5 4 5
b =
2 3 4
c =
0 0 1 0 1 0 1 0
indexes =
3 5 7
Obviously you can do away with "c" if you want, and just have a one-liner. I did it in two steps just for tutorial purposes.
  5 个评论
Image Analyst
Image Analyst 2016-5-5
Supraj:
Try this:
a = [1 5 2 5 3 5 4 2 5]
b = [5,2,4]
output = [];
for k = 1 : length(b)
output = [output, find(a == b(k))]
end
Shlomo Geva
Shlomo Geva 2020-12-2
编辑:Shlomo Geva 2020-12-2
Without an explicit loop (a bit convoluted, sorry, just having fun, 8 years too late)
a = [1 5 2 5 3 5 4 2 5];
b = [5,2,4];
[~,Locb]=ismember(a,b);
[s,si]=sort(Locb);
out=si(s>0)
out =
2 4 6 9 3 8 7
>>

请先登录,再进行评论。

更多回答(2 个)

Jos (10584)
Jos (10584) 2014-6-12
Use the second output of ismember:
a = [4 3 1 2 5]
b = [2 3 3]
[tf, loc] = ismember(b,a)
% loc is [ 4 2 2] as required

Shlomo Geva
Shlomo Geva 2020-12-2
编辑:Shlomo Geva 2020-12-2
function out = findMultipleElements(a,b)
% Find multiple elements in an array
% example:
% a = [1 5 2 5 3 5 4 2 5]
% b = [5,2,4]
% result = [2,4,6,9,3,8,7] % the indexes in a of elements from b, in order
% % The convoluted (obfuscated) solution.
[~,Locb]=ismember(a,b);
[s,si]=sort(Locb);
out=si(s>0);
% % The straight shooter solution.
% out = [];
% for n = 1:length(b)
% out = [out,find(a==b(n))]
% end
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