MATLAB Answers

0

whileループからparforループへの変換

Jo Sasaki さんによって質問されました 2019 年 7 月 16 日
最新アクティビティ Kenta Itakura
さんによって 回答されました 2019 年 7 月 18 日
forループ文をparforループを使用して時間の短縮を行いたいです。
コード本文は1次元csvに対して3000ずつ1データずらしでで切り取りを行っているのですが、forをparforに変更した際にこういったエラーが出ます。
parfor文のドキュメンテーションを見てもいまいちピンと来ないのでどこが間違っているのかご教授願いたいです。
原文
data = csvread('C:\Users\test\.csv'); % Put Data
data = transpose(data);
G = gpuArray(data);
L = length(data);
S = 3000; % Space
K = L-S+1;
for n =1:L-S+1;
t = data(n:n+S-1);
filename = ['C:\Users\test\test',num2str(n),'ch2.csv']; % Put Data name 'test'
csvwrite(filename, t);
n = n + 1;
end
エラー文
Error:Assigning to the loop variable "i" of a parfor is not allowed.
See Parallel for Loops in MATLAB, "Loop Variable".

  2 件のコメント

Kenta Itakura
2019 年 7 月 17 日
こんにちは。ちなみに、n=n+1を消去しても同じエラーがでますか?
Jo Sasaki 2019 年 7 月 18 日
n=n+1を消去しましたら作動いたしました。
ですが、ループの方はfor文を使用したときとあまり時間が変わらない結果となりました。
csv書き出しは結局cpuを使用しているためあまり差が出なかったのでしょうか?

サインイン to comment.

1 件の回答

Kenta Itakura
回答者: Kenta Itakura
2019 年 7 月 18 日
 採用された回答

n=n+1を消去すれば、動作すると思います。解析時間に関してですが、parpoolとコマンドウィンドウで打てば、自動的にクラスタが立ち上がりますが、その数が少なければ、結局、クラスタを立ち上げるための時間との相殺になって、あまり時間はかわらないかもしれません。

  0 件のコメント

サインイン to comment.