我试图在使用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
有人可以提供建议吗?
谢谢!
答案 0 :(得分:1)
我刚刚找到了我最初问题的答案:
我使用命令matlab -nodisplay -nodesktop -r "run('scriptname')"
从终端运行上面的Matlab脚本。出于某种原因,这并没有在parfor-loop之后将值分配给scores
。
现在,使用matlab -nodisplay -nodesktop -r "scriptname"
运行脚本或从Matlab中执行脚本使其完美运行。
@mathworks:这是一个错误吗? :)