1

私はこのコードを持っています:

Result = {};

% parfor k=1:1:3
for k=1:1:3

    % parfor j=1:1:10
    for j=1:1:10
        time = 1000*j;
        [A, B, C] = test (time,k,j);
        Result = cat(1,Result,{k,j,time,A,B,C});
    end

end

関数「test」は重いため、各「k」反復には約 20 分かかります。ご覧のとおり、変数 'Result' はセル マトリックスであり、各行には関数の結果と他の変数が含まれています。

'parfor' の最初の 'for ループ' を変更すると、結果は最初に警告 (警告: 一時変数 Result は、parfor ループの各反復の開始時にクリアされます) になり、最後にエラー (クリアされた変数への参照) になります。結果)。

追加データとして、「テスト」機能が独立しているため、2 つのループを並行して実行できます。問題は、結果を保存することです。

これを解決するにはどうしますか?

4

2 に答える 2

0

1) スライスされた変数を正常に作成するには、反復子Result{k}がどこにあるかを parfor ループ内でのみ使用しkます。入れ子になった cell 配列が気に入らない場合は、このドキュメント ページを詳しく見てください。

2) parfor ループをネストする (1 つのループを別のループに入れる) 場合は、ループを線形化します:複数の parfor ループをネストする方法

于 2014-06-28T17:53:24.717 に答える