Azzera filtri
Azzera filtri

Question about parfor nested loop

2 visualizzazioni (ultimi 30 giorni)
haonan He
haonan He il 1 Gen 2021
Commentato: haonan He il 3 Gen 2021
Hi,
I have a question about the nested parfor loop. Please see the following codes:
clc
clear
parfor i=1:3
for j=1:3
if j<2
B(i,j)=j;
end
end
end
The result of this code should be B=[1;1;1], but the Matlab gives B=[1,1,1;1,1,1;1,1,1]. I have been confused by this problem for a long time and thank you in advance if you have some time to look into the problem.
Haonan
  7 Commenti
haonan He
haonan He il 2 Gen 2021
Thanks Rik. I reran the code on Matlab 2020b and the result was correct, but it was not as expected when I used old versions, e.g, 2016a 2019a. So maybe it is the bug of the old versions.
haonan He
haonan He il 2 Gen 2021
Thanks Ive. I think the problem may be caused by different versions. When I ran your code on old versions, there was a system error "Index beyond matrix dimension", but it is correct on the lateset version 2020b. So maybe it is the bug of the old versions.

Accedi per commentare.

Risposta accettata

Matt J
Matt J il 2 Gen 2021
Modificato: Matt J il 2 Gen 2021
So maybe it is the bug of the old versions.
Yes, it appears to be version-related. I get the same thing in R2018a. Regardless, it is not good practice to use parfor to loop over sliced variables whose slices, in this case the B(i,:), are not allocated in advance. This cleaner version, for example, does not have the issue:
clc
clear
B=nan(3); %pre-allocate
parfor i=1:3
for j=1:3
if j<2
B(i,j)=j;
end
end
end
  1 Commento
haonan He
haonan He il 3 Gen 2021
Thanks Matt. Yes, the code does not generate the error.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Loops and Conditional Statements in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by