Find multiple elements in an array.
400 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Edward Umpfenbach
el 20 de Mzo. de 2012
Editada: Shlomo Geva
el 2 de Dic. de 2020
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.
0 comentarios
Respuesta aceptada
Image Analyst
el 20 de Mzo. de 2012
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 comentarios
Image Analyst
el 5 de Mayo de 2016
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
el 2 de Dic. de 2020
Editada: Shlomo Geva
el 2 de Dic. de 2020
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
>>
Más respuestas (2)
Jos (10584)
el 12 de Jun. de 2014
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
0 comentarios
Shlomo Geva
el 2 de Dic. de 2020
Editada: Shlomo Geva
el 2 de Dic. de 2020
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
0 comentarios
Ver también
Categorías
Más información sobre Matrices and Arrays en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!