2012-04-27 9 views
0

に重複を除去見つけるなく:私はこのようなMATLABで大きなアレイ有しMatlabの

C {:細胞は、このようになり

A =

{1x5 cell} 
{1x7 cell} 
{1x27 cell} 
{1x11 cell} 
    ... 

を1}

ANS = 'リンゴ'バナナ 'キーウィ' 'オレンジ'

Iを検索するの場合のように、二重の情報を含む検索細胞中:

C {27}

ANS = '亀' 'キウイ' 'キツネ' 'アナグマ'

すなわちここでは、C(1)とC(27)に重複する単語「キウイ」があるかどうかを確認したい。 私は手動でそれらを見て、私がどこに合っているかを確認することができます。あなたが持っている場合

私が使用する

+0

私の最初の質問はスタックだから、もっと明確にする必要があるかどうか教えてください。 ありがとう! – AndyMeow

+0

「ここには私が試したことがあるが、私はこのビットに固執している」という行に沿って質問に耳を傾ける傾向があります。それで、私の反応の様式 - それが助けてくれることを願っています。 – Adrian

答えて

0
は、私がコード化されたソリューションを提供するつもりはない申し訳ありませんが、より多くの私はあなたがコーディングを開始できるように、使用したいプロセスは、任意の特定の問題は、質問を投稿すること自由に落ちた

nchoosekはセルアレイCの全ての順列の配列を生成するので、

nCells = length(C); 
nPerms = nchoosek(1:nCells,2); 

することはでき、ループの一般的な文字列があるかどうかを確認するように交差使用してすべての順列を超えます。

result(i) = intersect(C{nPerms(i,1)},C{nPerms(i,2)}); 

これはあなたにすべての一般的な文字列をリストする配列を与えるだろうとnPerms配列を使用して、あなたは一般的な文字列で2つの行を持っています。しかし、これを実行しようとすると、intersectが各セル配列に同じ数の要素を持つのが好きなので失敗します。

私は空のセルで埋め込まれた一時的なセル配列を作成して、Cの各要素がループの前に同じ長さになるようにします。

これは、各セルの要素数(@numel)を計算し、次に最大値を計算することによって配列Cの中で最も長いセルを計算します。

cSize = cellfun(@numel,C); 
maxSize = max(cSize); 

私たちは、その後、これはあなたに、各セルの要素数が同じセル配列を与えるべきであるパッドに空白のセル

fcn = @(x) [x cell(1,maxSize - numel(x))]; 
paddedC = cellfun(fcn,C,'UniformOutput',false); 

を機能を定義することができます。この順列を各順列をテストするループでこのセル配列を使用することができます。

間違いなく、誰かが1行のcellfunソリューションを公開することは間違いありませんが、これで十分です。

関連する問題