find a vector in a big vector

2 ビュー (過去 30 日間)
Rica
Rica 2013 年 2 月 21 日
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

採用された回答

José-Luis
José-Luis 2013 年 2 月 21 日
編集済み: José-Luis 2013 年 2 月 21 日
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 件のコメント
José-Luis
José-Luis 2013 年 2 月 21 日
My pleasure
Jan
Jan 2013 年 2 月 21 日
Arrayfun with an anonymous function can be much (e.g. 10 times) slower than a corresponding simple FOR loop.

サインインしてコメントする。

その他の回答 (2 件)

Andrei Bobrov
Andrei Bobrov 2013 年 2 月 21 日
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 2013 年 2 月 21 日
編集済み: Jan 2013 年 2 月 21 日
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.

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by