在parfor循环中返回值

14次浏览(最近30天)
波
2020年5月14日
评论道: 2020年5月15日
嘿嘿,
现在我的源代码是这样的
ParForQueue = parallel.pool.DataQueue;
afterEach (ParForQueue @AddStruct);
parform = 1: Anzahl
...
发送(ParForQueue Satz)
结束
...
函数[] = AddStruct (sats)
全球TabellenRueckgabe
...
结束
我的问题是:如何才能避免全局变量。我想这样使用函数而不是使用全局函数
函数[TabellenRueckgabe] = AddStruct(Satz, TabellenRueckgabe)
TabellenRueckgabe (x) = Satz;
...
结束

接受的答案

Edric埃利斯
Edric埃利斯 2020年5月15日
从根本上说,您需要将一个值“绑定”到被调用的函数中 afterEach .最简单的方法是使用 嵌套函数 .这里有一个例子:在这个例子中,the 结果 Vector有在接收到数据队列消息时指定的元素:
函数结果= doStuff
q = parallel.pool.DataQueue;
%预分配函数的返回值
result = NaN(1,20);
%这个嵌套函数修改'result'的条目
函数nAccumulate(味精)
idx =味精(1);
val =味精(2);
结果(idx) = val;
结束
将DataQueue关联到嵌套函数。嵌套函数
%句柄可以看到和修改'result'。
afterEach (q, @nAccumulate);
%执行parfor循环,发送更新。
parfor2 = 1:10
idx =兰迪(20);
val = rand ();
%这将导致'result'中的第idx'元素获得该值
%的“val”。
发送(q (idx, val));
结束
结束
1评论
波
2020年5月15日
好主意。谢谢你!

登录评论。

更多的答案(0)

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!