Matlab - 设置嵌套的 parfor 循环
Matlab - setting up a nested parfor loop
我在 matlab 中设置 parfor 循环时遇到了问题。我知道这很容易,但我有点卡在这里,这就是为什么我会感谢所有帮助的原因。
我试过以下
valuesforM = zeros(901,100);
valuesforOPratio = zeros(100,1);
counter=1;
x = xlsread ('gtc.xlsx', 'A2:A10000');
y = xlsread ('gtc.xlsx','C2:C10000');
z = xlsread ('gtc.xlsx','B2:B10000');
parfor M = 100:1000;
counter=counter+1
for OPratio = 1:100;
NPVtotal = cut_off_optimisation(M,OPratio,x,y,z);
valuesforOPratio(OPratio)=NPVtotal;
end
valuesforM(M-99,:) = valuesforOPratio;
end
我收到以下错误:
Error using senitivity_script_10000_steps (line 10)
Error: The variable valuesforOPratio in a parfor cannot be classified.
我该如何解决这个问题?非常感谢。
编辑
根据评论建议,我尝试了以下操作:
valuesforM = zeros(901,100);
x = xlsread ('gtc.xlsx', 'A2:A10000');
y = xlsread ('gtc.xlsx','C2:C10000');
z = xlsread ('gtc.xlsx','C2:C10000');
parfor M = 100:1000;
NPVtotal = cut_off_optimisation(M,1:100,x,y,z);
valuesforM(M-99,:) = NPVtotal;
end
出现以下错误:
In an assignment A(:) = B, the number of elements in A and B must be the same.
Error in parforscript (line 8)
parfor M = 100:1000;
知道如何解决这两个问题吗?
正如您在评论中所说,由于不需要计数器,我已将其删除并且计数器也不会像那样工作,因为不同的迭代将以非顺序的方式 运行 并尝试更新相同的变量。这是不允许的。
接下来,您必须在 parfor loop
内执行 valuesforOPratio = zeros(1,100)
,因为如果您将它放在循环之外,那么每次迭代都会尝试访问同一个变量。这是不允许的。这就是为什么您会收到该错误的原因。当你把它放在里面时,每次迭代都会访问一个本地创建的变量。这也是您在基础工作区中找不到它的原因。这是更正后的代码。
valuesforM = zeros(901,100);
x = xlsread ('gtc.xlsx', 'A2:A10000');
y = xlsread ('gtc.xlsx','C2:C10000');
z = xlsread ('gtc.xlsx','B2:B10000');
parfor M = 100:1000;
valuesforOPratio = zeros(1,100);
for OPratio = 1:100;
NPVtotal = cut_off_optimisation(M,OPratio,x,y,z);
valuesforOPratio(OPratio)=NPVtotal;
end
valuesforM(M-99,:) = valuesforOPratio;
end
我在 matlab 中设置 parfor 循环时遇到了问题。我知道这很容易,但我有点卡在这里,这就是为什么我会感谢所有帮助的原因。
我试过以下
valuesforM = zeros(901,100);
valuesforOPratio = zeros(100,1);
counter=1;
x = xlsread ('gtc.xlsx', 'A2:A10000');
y = xlsread ('gtc.xlsx','C2:C10000');
z = xlsread ('gtc.xlsx','B2:B10000');
parfor M = 100:1000;
counter=counter+1
for OPratio = 1:100;
NPVtotal = cut_off_optimisation(M,OPratio,x,y,z);
valuesforOPratio(OPratio)=NPVtotal;
end
valuesforM(M-99,:) = valuesforOPratio;
end
我收到以下错误:
Error using senitivity_script_10000_steps (line 10)
Error: The variable valuesforOPratio in a parfor cannot be classified.
我该如何解决这个问题?非常感谢。
编辑
根据评论建议,我尝试了以下操作:
valuesforM = zeros(901,100);
x = xlsread ('gtc.xlsx', 'A2:A10000');
y = xlsread ('gtc.xlsx','C2:C10000');
z = xlsread ('gtc.xlsx','C2:C10000');
parfor M = 100:1000;
NPVtotal = cut_off_optimisation(M,1:100,x,y,z);
valuesforM(M-99,:) = NPVtotal;
end
出现以下错误:
In an assignment A(:) = B, the number of elements in A and B must be the same.
Error in parforscript (line 8)
parfor M = 100:1000;
知道如何解决这两个问题吗?
正如您在评论中所说,由于不需要计数器,我已将其删除并且计数器也不会像那样工作,因为不同的迭代将以非顺序的方式 运行 并尝试更新相同的变量。这是不允许的。
接下来,您必须在 parfor loop
内执行 valuesforOPratio = zeros(1,100)
,因为如果您将它放在循环之外,那么每次迭代都会尝试访问同一个变量。这是不允许的。这就是为什么您会收到该错误的原因。当你把它放在里面时,每次迭代都会访问一个本地创建的变量。这也是您在基础工作区中找不到它的原因。这是更正后的代码。
valuesforM = zeros(901,100);
x = xlsread ('gtc.xlsx', 'A2:A10000');
y = xlsread ('gtc.xlsx','C2:C10000');
z = xlsread ('gtc.xlsx','B2:B10000');
parfor M = 100:1000;
valuesforOPratio = zeros(1,100);
for OPratio = 1:100;
NPVtotal = cut_off_optimisation(M,OPratio,x,y,z);
valuesforOPratio(OPratio)=NPVtotal;
end
valuesforM(M-99,:) = valuesforOPratio;
end