parfor循环后matlab变量为空

时间:2013-11-14 15:05:10

标签: ubuntu matlab parfor

我试图在使用Matlab 2013a和i7处理器的Ubuntu 13.04机器上并行运行我的一些Matlab代码:

range = [0.75 0.8];
scores = cell(length(range), 1);

parfor i=1:length(range)
   pca_accuracy = range(i);
   scores{i, :} = cross_validation(data_features, labels, 69, pca_accuracy);
end

cross_validation()返回一个矩阵。但是,在运行此代码之后,变量scores仍然是一个2乘1的单元阵列,每个单元格都为空。好像cross_validation()似乎没有返回任何内容。

如果我将parfor-loop转换为普通for循环,它在这台计算机上也能正常工作。我还在另一台计算机上测试了这段代码(使用parfor-loop)(Windows 7,Matlab 2013b),它在那里工作正常。

cross_validation()的简短版本是:

function scores = cross_validation(data_features, labels, number_of_test_blocks, pca_accuracy)
   number_of_samples = size(data_features, 1);
   samples_per_test_block = ceil(number_of_samples/number_of_test_blocks);
   scores = zeros(number_of_test_blocks, samples_per_test_block);
end

有人可以提供建议吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我刚刚找到了我最初问题的答案:

我使用命令matlab -nodisplay -nodesktop -r "run('scriptname')"从终端运行上面的Matlab脚本。出于某种原因,这并没有在parfor-loop之后将值分配给scores

现在,使用matlab -nodisplay -nodesktop -r "scriptname"运行脚本或从Matlab中执行脚本使其完美运行。

@mathworks:这是一个错误吗? :)