Parfor无法运行,因为变量' A'用来

时间:2016-11-08 16:57:48

标签: matlab parfor

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

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

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.

我该如何解决这个问题?

1 个答案:

答案 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}}