由于使用变量 'A' 的方式,Parfor 不能 运行

Parfor cannot run due to the way variable 'A' is used

EDIT: 我修改了下面的问题。我提供的原始示例过于简单,无法捕捉到我面临的问题

考虑以下两个示例。第一个例子工作正常:

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 - 一个我们可以自由分配的临时数组,然后我们在 parfor 之后对 A 进行单个分配slicing rules.