【发布时间】:2013-05-21 11:56:50
【问题描述】:
我在 Matlab 的 parfor 循环中使用结构数组时遇到问题。以下代码有2个问题我不明白:
s=struct('a',{},'b',{});
if matlabpool('size')==0
matlabpool open local 2
end
for j = 1:2
parfor k=1:4
fprintf('[%d,%d]\n',k,j)
s(j,k).a = k;
s(j,k).b = j;
end
end
matlabpool close
- 失败并出现错误
Error using parallel_function (line 589) Insufficient number of outputs from right hand side of equal sign to satisfy assignment. - 在输出时,变量
s是一个向量,而不是一个数组(应该是这样,即使代码在完成之前中断)。
编辑如果我将结构数组初始化为正确的大小,问题就解决了,方法是:
s=struct('a',cell(2,4),'b',cell(2,4));
但是,我仍然很乐意获得有关该问题的见解(例如,它是否像 Oleg Komarov 所建议的那样集结了一个错误)
【问题讨论】:
-
对于第 2 点,“数组”而不是“向量”是什么意思?在 Matlab 中没有区别。在我看来,
s应该是这段代码末尾的structs 的 2x4 矩阵。 -
我认为这实际上是一个错误,我建议提交support equest 并让我们保持更新。
-
@jazzbassrob,向量是一个 1xd 数组(或 dx1)。
标签: matlab parallel-processing