如何在MATLAB中使用parfor收集结果

时间:2015-06-12 17:55:38

标签: matlab

我有一个名为SpreadFinder的函数,它返回一个结构数组:

[ spreads ] = SpreadFinder( pp, corr_thres, i_range )

返回对象如下所示:

spreads = 
1x4026 struct array with fields:
px
tuple
beta

代码是:

m = containers.Map(0, 0, 'uniformValues',false); m.remove(0);
parfor col = 1:8
    spreads = SpreadFinder(pp, 0.8, i_ranges(:,col)');
    m(col)  = spreads;
end

当我运行它时,我有这个错误:

Subscripted assignment dimension mismatch.

我知道Map可用于存储结构数组。 (https://stackoverflow.com/a/2365526

以下代码有效。所以我认为这不是维度问题......

m(1) = spreads(1:2);
m(2) = spreads(1:4);

目标是将所有结果合并到一个地图中,并可能在并行任务之后迭代此地图。

有人能帮助我吗?

最佳,

1 个答案:

答案 0 :(得分:1)

IIRC,您无法在containers.Map内分配parfor,因为containers.Map不是sliceable。如果要将元素分配给parfor内的数组,则必须是可切片的。我的意思是可切片的是你能够通过colon运算符(即1:32:4)等提取值的子集。你不能用{{{{}}来做到这一点。 1}}除非您专门使用containers.Map函数,否则您可以指定键的单元格数组并从中获取值。使用values语法只允许您一次访问一个键。

因此,我建议您将输出分配给单元格数组,并将此单元格数组用作()中的值。像这样:

containers.Map