0

我正在尝试在具有 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 循环转换为普通的 for 循环,它在这台计算机上也可以正常工作。我还在另一台计算机(Windows 7,Matlab 2013b)上测试了这段代码(使用 parfor-loop),它在那里运行良好。

一个简短的版本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

有人可以给建议吗?

谢谢!

4

1 回答 1

1

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

我正在使用命令从终端运行上述 Matlab 脚本matlab -nodisplay -nodesktop -r "run('scriptname')"。由于某种原因,这没有scores在 parfor 循环之后分配值。

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

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

于 2013-11-14T16:54:17.273 回答