I want to find whether code [1 1 -1 -1] is present in a cell C in which C{1}=[1 1 1 1],C{2}=[1 1 -1 -1],C{3}=[1 -1 1 -1],C{4}=[1 -1 -1 1]. Also find out what is the location of the code.

 採用された回答

Evan
Evan 2015 年 2 月 18 日
編集済み: Evan 2015 年 2 月 18 日

1 投票

key = [1 1 -1 -1]
C{1} = [1 1 1 1];C{2}=[1 1 -1 -1];C{3}=[1 -1 1 -1];C{4}=[1 -1 -1 1]
loc = find(cellfun(@(x)all(x == key),C));
You could also do this with a for loop, checking each cell of C one iteration at a time. cellfun effectively does this.

4 件のコメント

ankit
ankit 2015 年 2 月 18 日
thankyou sir. Also sir, what should I do if I want to search for a) [1 1] in C b) [1 1 -1 -1 1 1 -1 -1] is containing elements which is a part of C
Stephen23
Stephen23 2015 年 2 月 18 日
編集済み: Stephen23 2015 年 2 月 18 日
Try using strfind (yes, it also works on numeric arrays!).
ankit
ankit 2015 年 2 月 18 日
when i'm using strfind, there is an error showing as "If any of the input arguments are cell arrays, the first must be a cell array of strings and the second must be a character array." i'm using mat2cell([1 1 -1 -1]) and then comparing with C
Stephen23
Stephen23 2015 年 2 月 19 日
編集済み: Stephen23 2015 年 2 月 19 日
strfind works on numeric arrays, and not on cell arrays containing numeric arrays. Try it with a simple numeric vectors first to see how it works. Although you have already accepted Evan's answer, this might be more what you are wanting:
cellfun(@(c)strfind(c,key), C)
Or if there might be multiple matches / non-matched entries:
cellfun(@(c)strfind(c,key), C, 'UniformOutput',false)

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

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeCell Arrays についてさらに検索

タグ

質問済み:

2015 年 2 月 18 日

編集済み:

2015 年 2 月 19 日

Community Treasure Hunt

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

Start Hunting!

Translated by