0

私はMatlabに次のような大きな配列を持っています:

A =

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

セルは次のようになります。

C {1}

ans='リンゴ''バナナ''キウイ''オレンジ'

次のような二重の情報を含むセルをAで検索する場所を見つけたいです。

C {27}

ans='カメ''キウイ''キツネ''アナグマ'

つまり、C(1)とC(27)に重複する単語「kiwi」があるかどうかを確認したいと思います。そのため、手動でそれらを確認し、適切と思われる場所で重複を削除する場所を決定できます。

4

1 に答える 1

0

申し訳ありませんが、コード化されたソリューションを提供するつもりはありません。具体的な問題が発生した場合は、コーディングを開始できるようにするために使用するプロセスを詳しく説明します。質問を投稿してください

nchoosekセル配列のすべての順列の配列を生成するために使用するCので、

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

その後、intersect を使用してすべての順列をループし、共通の文字列があるかどうかを確認できます。

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);

これにより、各セルに同じ数の要素を持つセル配列が得られます。次に、この cell 配列をループで使用して、各順列をテストできます。

誰かが 1 行の cellfun ソリューションを提示することは間違いありませんが、これで十分に開始できることを願っています。

于 2012-04-27T14:03:12.170 に答える