有人在matlab中使用parfor知道这个简单代码中发生了什么吗?谢谢,
我将矩阵切成四个数组,并希望独立更新每个数组中的元素
这是一个简单的版本:
a = zeros(4,4);
parfor i = 1:4
j = 2;
a(j,i) = 3;
end
Run Code Online (Sandbox Code Playgroud)
错误:'a'的有效索引在parfor循环中受到限制;
然而,
这工作:
a = zeros(4,4);
parfor i = 1:4
a(2,i) = 3;
end
Run Code Online (Sandbox Code Playgroud)
另一个更简单的非工作版本具有相同的错误:
a = zeros(4,4);
parfor i = 1:4
a(i,i) = 3;
end
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,索引j是通过某种算法为每个数组独立生成的
您想要实现的目标似乎是不可能的。
根据matlab文档:
当您将其他变量与循环变量一起使用来索引数组时,无法在循环内设置这些变量。实际上,这些变量在整个 parfor 语句的执行过程中是恒定的。不能将循环变量与其自身组合起来形成索引表达式。
因此,除了循环变量之外,用于索引数组的所有变量在整个循环中都必须保持不变。