matlab - 由于使用变量 'A' 的方式,Parfor 无法运行

标签 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.

我该如何解决这个问题?

最佳答案

你需要一次分配一整行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/

相关文章:

algorithm - 使用霍夫变换进行椭圆检测

matlab - 为什么访问 parfor 中的二维矩阵这么慢?

matlab - MATLAB 的 parfeval 函数是如何工作的?

image - 如何检测区域上方和下方的点?

compiler-errors - 为自定义MATLAB工具箱执行编译器脚本时出错

matlab - 如何在MATLAB中为随机数生成器设置统一种子?

string - MatLab 中的向量/字符串数组

matlab - 强制 parfor 遵守某些命令

matlab - 防止 MATLAB 打开池

matlab - MATLAB parfor 中的错误版本或字节序键?