编辑:我修改了以下问题。我提供的原始示例过于简单,无法捕捉我面临的问题
考虑以下两个例子。第一个例子工作正常:
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.
我该如何解决这个问题?
答案 0 :(得分:3)
您需要一次分配一整行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
进行一次分配3}}