find a vector in a big vector

2 Ansichten (letzte 30 Tage)
Rica
Rica am 21 Feb. 2013
hi! how could i write this:
%
index=[find(a=2);find(a=4);find(a=6);find(a=8)....find(a=20)]
in a compact manner?
thank you

Akzeptierte Antwort

José-Luis
José-Luis am 21 Feb. 2013
Bearbeitet: José-Luis am 21 Feb. 2013
vals = (2:2:20)';
your_mat = cell2mat(arrayfun(@(x) {find(a==x)},vals,'uniformoutput',false));
And if you don't care about the order:
vals = (2:2:20)';
[ia ib] = ismember(a,vals);
  4 Kommentare
José-Luis
José-Luis am 21 Feb. 2013
My pleasure
Jan
Jan am 21 Feb. 2013
Arrayfun with an anonymous function can be much (e.g. 10 times) slower than a corresponding simple FOR loop.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Andrei Bobrov
Andrei Bobrov am 21 Feb. 2013
a = randi(80,50,1);
v = (2:2:20).';
[i1,i2] = ismember(a,v);
i3 = find(i1);
[~,jj] = sort(i2(i1));
index = i3(jj);

Jan
Jan am 21 Feb. 2013
Bearbeitet: Jan am 21 Feb. 2013
Please compare the runtime of this simple loop with the compact ARRAYFUN function with an anonymous function:
search = [2,4,6,8,20];
C = cell(1, length(search));
for iSearch = 1:length(search)
C{iSearch} = find(a == search(iSearch));
end
result = cat(2, C{:});
If compactness of the code really matters, write this as a function.

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by