1

こんにちは、matlab の並列ツールボックスを使用するのは初めてです。私はこのループを持っています

for y=1:size(pxyvector,1)
    if (strcmp(pxyvector{y,1}, emotionword))&&(strcmp(pxyvector{y,2},tweet{x}))
          pxyvector{y,3} = pxyvector{y,3} +1;
          invector = true;
    end
end

どうすればこれを並行して機能させることができますかfor。matlab のスライス変数の部分を読みましたが、ここでこれを行う方法がわかりません。

pxyvectorは 100000x3 セル配列です

tweet{x}文字列です

emotionwordも文字列です。

invector後でループの外で使用される値です。

したがって、基本的には、pxyvector の行の最初の値を感情語と比較し、pxyvectortoの行の 2 番目の値を比較しtweet{x}ます。それらが同じ場合。行の 3 番目の値が増加します。

ループ中に同じ値を 2 回インクリメントすることはできません。

この for ループの問題は、ループの外でも使用される変数を変更して、値をインクリメントする必要があることです。

再生するデータ: http://ojtwist.be/pxyvector.mat (変数はこの .mat ファイルの pxyvector2 であるため、テストする場合はコードで変更します)

4

1 に答える 1

1

ここでの問題は、matlab がセル行列を通常の行列として処理しないことだと思います (実際、a{1,:} は期待どおりに動作しません)。

私の知る限り、使用するには、具体的には要素parforとして、別のデータ編成が必要です。Nx1 cell3x1 cell

たとえば、次のように動作します

tot = size(pxyvector,1)
%%%%// just to reshape data correctly
pxvector_a = pxyvector;
pxyvector = cell(1,tot);
for i = 1:tot
   pxyvector{i} = {pxvector_a{i,1} pxvector_a{i,2} pxvector_a{i,3}};    
end
%%%%

 parfor y=1:tot
    if (strcmp(pxyvector{y}{1}, 'almost'))&&(strcmp(pxyvector{y}{2},'that'))
          pxyvector{y}{3} = pxyvector{y}{3} +1;
          invector = true;
    end
end

を引き続き使用できますsmpdが、現在のデータ編成では、適切な分散配列の作成が難しくなります。

于 2012-11-24T18:15:50.890 に答える