我想知道如何在 parfor 循环中调用函数时轻松访问全局变量?例如示例代码如下,
global a
a = 132.1;
A = [0, 0, 0];
for i=1:3
A(i) = test(i);
end
测试函数是
function f = test(v)
global a
f = a+v;
这种格式的代码应该是正确的,但是,如果我将 for 更改为 parfor,则会出现问题。我认为主要问题是全局变量a。那么我该如何修改代码呢?虽然在这个例子中,修改很简单,不需要parfor,但我的真实代码确实很复杂,问题归结为同一个问题。
问题在于parfor和全球变量:
有两个限制。
You cannot place a GLOBAL declaration directly inside a PARFOR loop
The MATLAB workers executing the body of your PARFOR loop are separate MATLAB processes, and the values of global variables are not synchronised
因此,虽然您可以在调用的函数中使用 GLOBAL 变量
PARFOR 循环的主体,它们的行为可能不会如您所愿。
所以在我看来,你可以通过a
将变量添加到循环并避免全局变量,这对于函数式编程和一般编程来说是一个很好的规则。还有其他类似的解决方案:
http://www.mathworks.com/matlabcentral/fileexchange/31972-worker-object-wrapper
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)