web-dev-qa-db-ja.com

MATLABでセル配列の文字列を検索する方法は?

私はセル配列を持っているとしましょう

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}

'KU'のインデックスを見つけたい場合はどうすればよいですか?

98
Benjamin

次のコードでうまくいくと思います:

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ind=find(ismember(strs,'KU'))

これは戻ります

ans = 
     2
126
Vidar
>> strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
>> tic; ind=find(ismember(strs,'KU')); toc

経過時間は0.001976秒です。

>> tic; find(strcmp('KU', strs)); toc

経過時間は0.000014秒です。

SO、明らかにstrcmp('KU', strs)ismember(strs,'KU')よりもはるかに短い時間で済みます

90
Pankaj Gupta

2011a以降、推奨される方法は次のとおりです。

booleanIndex = strcmp('KU', strs)

整数インデックス(たいていは必要ない)を取得したい場合は、次を使用できます。

integerIndex = find(booleanIndex);

strfindは非推奨です。使用しないようにしてください。

39

私は誰もがあなたのコードの最も重要な欠陥を見逃しているのを見ています:

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}

する必要があります:

strs = {'HA' 'KU' 'NA' 'MA' 'TATA'} 

または

strs = {'HAKUNA' 'MATATA'}

今、あなたが使用に固執する場合

ind=find(ismember(strs,'KU'))

心配なし :)になります。

23
Curt

この場合、他の答えはおそらく簡単ですが、完全を期すために、無名関数でcellfunの使用を追加すると思いました

indices = find(cellfun(@(x) strcmp(x,'KU'), strs))

これには、構造体のセル配列がある場合に、大文字と小文字を区別しないようにするか、簡単に使用できるという利点があります。

indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs))
13
robince

最も短いコード:

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
[~,ind]=ismember('KU', strs)

ただし、strsの最初の位置のみを返します。要素が見つからない場合は、ind=0

6
Maxim Suslov

Strcmpおよびstrcmpi関数は、これを行う最も直接的な方法です。配列を検索します。

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ix = find(strcmp(strs, 'KU'))
5
Andrew Janke