一个有趣的问题;我实际上从未遇到过这个问题。了解有关限制的一切总是好的parfor
,所以我做了一些谷歌搜索并想出了这个:
我已从技术支持处收到了对此问题的答复。显然,Mathworks 将其视为不返回对象更改的“功能” - 尽管我看不出这是一个非常有用的功能。无论如何,获取从 parfor 循环返回的修改后的类属性的方法是进行可以被 parfor 识别的显式更改。以下是适用于上述示例对象的两个示例:
parfor n = 1:num
exArray(n).data = n:n+5;
end
或者
parfor n = 1:num
temp = exArray(n);
setData(temp,n:n+5);
exArray(n) = temp;
end
实际上,如果您更改任何对象属性,它似乎也可以工作。因此,例如这也有效,如果明确设置了第二个属性 data2 ,则 data 和 data2 都会正确返回:
parfor n = 1:num
setData(exArray(n),n:n+5);
exArray(n).data2 = n:n+5;
end
示例对象由
classdef Example < handle
properties
data
end
methods
function obj = Example(data)
obj.data = data;
end
function setData(obj,data)
obj.data = data;
end
function data = getData(obj)
data = obj.data;
end
end
end
并且数组被简单地初始化为
% Initialise array of objects
for n = 1:num
exArray(n) = Example(zeros(1,6));
end