主要内容

中使用对象和句柄parfor循环

对象

当你运行parfor-loop,您可以将广播变量或切片的输入变量从客户端发送到workers,或将切片的输出变量从workers发送回客户端。的保存而且负载必须支持向工作者发送或从工作者发送的万博1manbetx每个对象的函数。有关更多信息,请参见对象的保存和加载过程

类中不支持将值赋给对象的切片属性或结构的切片字段万博1manbetxparfor循环。

无效的 有效的
S = struct;parfori = 1:4 s.SomeField(i) = i;结束
parforI = 1:4 x(I) = I;结束S = struct(“SomeField”, x);

有关第一级索引约束的详细信息,请参见切变量

处理类

类的句柄对象可以作为输入发送到parfor循环。但是,在循环迭代期间为处理工作对象所做的任何更改都不会自动传播回客户端。也就是说,在循环内部所做的更改不会在循环之后自动反映出来。

类的输出变量,显式地将修改后的句柄对象赋值给parfor循环。在下面的例子中,地图是切片的输入/输出变量。

maps = {containers.Map(),containers.Map(),containers.Map()};parforIi = 1:numel(maps) mymap = maps{Ii};%输入片分配给本地副本mymap(num2str(Jj)) = rand;结束Maps {ii} = mymap;%已修改的本地副本分配给输出片结束

引用函数句柄的切片变量

不能直接调用以循环索引作为输入参数的函数句柄,因为不能将此变量与切片的输入变量区分开来。如果必须以循环索引变量作为参数调用函数句柄,请使用函数宏指令

下面的示例使用函数句柄和循环。

B = @sin;A(ii) = B(ii);结束

一个相应的parfor-loop不允许B引用函数句柄。作为一种变通方法,使用函数宏指令

B = @sin;parforA(ii) = feval(B,ii);结束

相关的话题