2013-11-14 194 views
0

後空我試圖用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 

誰能給意見?

謝謝!

+0

您能否提供一個減少cross_validation變量和變量,以便我們可以檢查我們的機器上是否具有相同的行爲? – bdecaf

+0

@bdecaf謝謝!我將代碼添加到了最初的帖子中。 – davhab

+0

也許'parfor'在2013a被'scores {i,:''扔掉了。你有沒有嘗試過分配給'scores {i,1}'? –

回答

1

我只是找到了答案,我最初的問題:

我是從終端使用命令matlab -nodisplay -nodesktop -r "run('scriptname')"運行上面的MATLAB腳本。出於某種原因,這並未在parfor-loop之後將值分配給scores

現在,使用matlab -nodisplay -nodesktop -r "scriptname"運行腳本或從Matlab內部執行腳本使其完美工作。

@mathworks:這是一個錯誤? :)