1

文の文字列を含むセル配列 x のセル配列があり、x 内のすべての一意の単語トークンのリストを検索し、それを使用して配列構造 y のフィールド名を作成したい (そのフィールド名がまだ存在しない場合) Yについて。現在、二重の for ループを使用して x の各文の文字列を反復処理し、次に個々の一意の単語を反復処理してタスクを実行していますが、セル配列に含まれる文字列が多すぎると非常に遅くなる可能性があります。

for i=1:length(x)
    unique = unique(x{i});
    for j=1:length(unique)
            y.(unique{j}) = {};
    end
end

サンプル入力:

x = {{'hello', 'world'}, {'foo', 'bar'}, {'eat', 'foo', 'ice', 'cream'}, {'hello', 'dad'}};
y = {};

その場合、unique は次のようになる必要があります。

unique = {'hello', 'world', 'foo', 'bar', 'eat', 'ice', 'cream', 'dad'}

構造体配列 y は、すべての単語トークンをフィールド名として一意にする必要があります。したがって、y.hello、y.world、y.foo、y.bar、y.eat、y.ice、y.cream、y.dad があるはずです。y が必要に応じて出力される限り、単語トークンの一意のリストは必要ありません。プログラムをより高速に実行するために、ベクトル化またはその他の方法でこれらの操作を合理化する方法はありますか? ありがとう。

4

1 に答える 1

5

なぜあなたはuniqueその言葉のためにやるのですか?単語ごとに空のセルを作成するだけの場合、それを数回作成するのになぜ気にするのでしょうか。結局、1つだけが残ります。

>> x = unique( [x{:}] );
>> y = cell2struct( cell(1, numel(x)), x, 2 )

y = 

      bar: []
    cream: []
      dad: []
      eat: []
      foo: []
    hello: []
      ice: []
    world: []
于 2013-03-04T07:44:54.753 に答える