parforでの計算​結果出力について(メ​モリの処理)

以下のコードのようにparforの1ループごとに複数の解が得られ,解の個数がループ毎に変化する場合を考えます.
このとき,最も内側の計算は十分複雑でforループを利用する必要のあるものとします.
現状ではスライス化し,各イテレータを用いて結果を格納した後にparforループ外で結果が0となるものを除くことで欲しいデータを得ていますが,この手法では計算中に余分な配列が多く形成されるため,メモリの制約によって少ないループでしか計算ができません.
以下のコードで指すところのresult1やresult2を経由せずに直接Dの部分だけ取り出すような,少ないメモリで欲しいデータのみを取り出す方法はありませんでしょうか?
parfor i = 1:10
for j = 1:10
for k = 1:10
m = i*j*k;
if mod(m,3)==0
result1(i,j,k) = m;
end
result2(i,j,k) = i;
end
end
end
A = reshape(result1,numel(result1),1);
B = reshape(result2,numel(result2),1);
C = [A B];
D = C((C(:,1)~=0),:);

Answers (0)

Categories

Find more on ループと条件付きステートメント in Help Center and File Exchange

Products

Release

R2020a

Asked:

dai
on 30 Sep 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!