编辑:我修改了下面的问题。我提供的原始示例过于简单,无法捕捉到我面临的问题
考虑以下两个示例。第一个例子工作正常:
parfor i = 1:4
for j = 1:3
A(i,j) = i + j;
end
end
但是,第二个例子导致 Matlab 报错
B = [1 3 4;1 2 5;2 3 4;1 3 5];
parfor i = 1:4
for j = 1:3
A(i,B(i,j)) = i + j;
end
end
错误是:
The PARFOR loop cannot run due to the way variable 'A' is used.
我该如何解决这个问题?
最佳答案
你需要一次分配一整行A
,像这样:
B = [1 3 4;1 2 5;2 3 4;1 3 5];
Am = 4; An = max(B(:));
A = zeros(Am, An);
parfor i = 1:4
tmp = zeros(1, An);
for j = 1:3
tmp(1,B(i,j)) = i + j;
end
A(i, :) = tmp;
end
关键部分是首先我们创建 tmp
- 一个我们可以自由分配的临时数组,然后我们对 A
进行一次分配,紧跟在 parfor
slicing rules .
关于matlab - 由于使用变量 'A' 的方式,Parfor 无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40492445/