由于使用变量 '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.
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.