0

MATLAB でループを並列化しようとすると、「'X_train' の有効なインデックスは PARFOR ループで制限されています」というエラーが表示されます。私のコードは以下の通りです:

parfor c = 1:num_channels

% sum_n_train calculated here

for n = 1:sum_n_train
    bin_n = bin(n);

    Xmj = X_train(bin_n, :);

% some calculations happen in between

    X_train(bin_n,:) = Xmj;
    X_train(bin_n, p) = X_train(bin_n, p) + 1;

    z_train(n)= zind;
end

z_train_cell{c} = z_train;
end

X_train は n 行 p 列の行列で、Xmj は 1 行 p 列のベクトルです。エラーは X_train のものです。ドキュメントを読むと、すべての変数のインデックス付けを parfor ループ内で修正する必要があることがわかります。ただし、行をコメントアウトしてもX_train(bin_n, p) = X_train(bin_n, p) + 1;(X_train のインデックスが他の 2 行とは異なります)、それでもエラーが発生します。誰かが理由とそれを回避する方法を説明してもらえますか?

4

2 に答える 2

1

分析

自分で試すことはできませんが、parforループのいくつかのインスタンスで同じものに書き込もうとしているようです。

のようです

X_train(bin_n,:)=Xmx

parfor が入力されるたびに発生します。具体的には、@ Daniel がX_train(1,:)述べたように何度も上書きされます。


解決

できることは次のとおりです。

  1. 行を 1 行ずつコメントアウトし、最も単純なものから始めて、エラーが消えるまで続けます。
  2. コメントアウトされた行に割り当てられているすべての変数にディメンションを追加します。これにより、それらへの割り当てが重複しなくなります。

例:

 `X_train(c,bin_n,:)`

その後、もう一度コメントを外してコードを実行してください! それでも問題が発生する場合は、ディメンションをさらに変数に追加する必要がある場合があります。

于 2014-05-16T14:37:03.393 に答える