2017-06-07 13 views
2

私は以下の通りであるセル配列があります。セル配列matlabの行のサブアイテムを見つける方法は?

S{1} = [10,20,30,40,50]; 
S{2} = [10,20,40,50]; 
S{3} = [10,50,510]; 
S{4} = [10,20,70,40,60]; 
S{5} = [20,40]; 

をして、私はサブアイテムである細胞の行を見つける必要があります。結果は上記の例のために

[10,20,30,40,50,60] 

を:

1,2,5 

です。行1、行2および行5は[10,20,30,40,50,60]のサブアイテムしか持たないためです。

私のワークセル配列が大きいです。私は速いコードが必要です。

+1

あなたはそれがS書かれている方法は、セルではありません。あなたは 'S {1} = ..'などを意味しました –

+0

はい。セルの定義が編集されました –

答えて

7

その後、あなたはcellfunを経由して、各セルの内容にismemberallを適用することができます

S{1} = [10,20,30,40,50]; 
S{2} = [10,20,40,50]; 
S{3} = [10,50,510]; 
S{4} = [10,20,70,40,60]; 
S{5} = [20,40];   % data 
t = [10,20,30,40,50,60]; % target values 

をしてみましょう。結果は、あなたがfindで希望の指標を得る、そこから論理ベクトル、されています

result = find(cellfun(@(x) all(ismember(x, t)), S)); 

代替は(私は1つがあなたのケースで速くなりますかわからない)全ての対比較を計算することによってismemberを交換することですその後、bsxfunとしてanyを適用する:

result = find(cellfun(@(x) all(any(bsxfun(@eq, t(:), x(:).'), 1)), S)); 
+0

ありがとうございます –

関連する問題