後空我試圖用Matlab 2013a和i7處理器Ubuntu的13.04機器上運行一些並行我的Matlab代碼:Matlab的變量PARFOR循環
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-loop,它在這臺計算機上也能正常工作。我還在另一臺計算機上測試了這個代碼(使用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
誰能給意見?
謝謝!
您能否提供一個減少cross_validation變量和變量,以便我們可以檢查我們的機器上是否具有相同的行爲? – bdecaf
@bdecaf謝謝!我將代碼添加到了最初的帖子中。 – davhab
也許'parfor'在2013a被'scores {i,:''扔掉了。你有沒有嘗試過分配給'scores {i,1}'? –