2015-04-02 17 views
0

分類的錯誤,我希望並行寫入下面的代碼:爲PARFOR

min=0; 
    LB=[min1 min2] 
    UB=[max1 max2] 
    numvalues2=OpParam(2); 
    for i =LB(1):step1:UB(1), 
     for j =LB(2):step2:UB(2) 
      acc=ComputeCbetaPerm([i j],featureMatrix,labelMatrix); 
      if(acc < max) 
       acc=min; 
       values=[i j]; 
      end 
     end 
end 

我改爲以下,以避免使用臨時變量的max但仍給人分類的錯誤,我不得到。

LB=[min1 min2] 
    UB=[max1 max2] 
    Result=cell(numvalues1,numvalues2,1); 
    outervalues=LB(1):step1:UB(1); 
    innervalues=LB(2):step2:UB(2); 
    for (i =1:numel(outervalues)), 
     parfor (j =1:numel(innervalues)), 
      acc=ComputeCbetaPerm([outervalues(i) innervalues(j)],featureMatrix,labelMatrix); 
      Result(i,:,1)={outervalues(i),innervalues(j),acc}; 
     end 
    end 

還問到http://in.mathworks.com/matlabcentral/answers/195799-classification-error-for-parfor

編輯:

下標的轉讓尺寸不匹配。

造成者: 下標分配維度不匹配。

Ĵ

ANS =

0.0000 + 1.0000i

+0

將'parfor'替換爲'for'並運行代碼。由於Result(1,:,1)被多次寫入,索引有問題。 – Daniel 2015-04-02 13:54:51

+0

你能解釋你的代碼嗎?它是在尋找最大值還是最小值?爲了更好的可讀性,你可以用'linspace'替換'LB(1):((UB(1)-LB(1))/(numvalues1 -1)):UB(1)' – Daniel 2015-04-02 13:57:41

+0

我不太瞭解除谷歌搜索外如何解決分類問題。理想情況下,它應該是'Result(i,j,1)' – 2015-04-02 13:58:37

回答

1

誤差無關PARFOR。您可以用parfor替換爲,您將收到相同的錯誤。

LB=[min1 min2] 
UB=[max1 max2] 
Result=cell(numvalues1,numvalues2,3); 
outervalues=LB(1):step1:UB(1); 
innervalues=LB(2):step2:UB(2); 
for i =1:numel(outervalues) 
    parfor j =1:numel(innervalues) 
     acc=ComputeCbetaPerm([outervalues(i) innervalues(j)],featureMatrix,labelMatrix); 
     Result(i,j,:)={outervalues(i),innervalues(j),acc}; 
    end 
end 

您試圖將三個值放入單元格中,但您只爲一個單元格分配空間。