2015-09-07 57 views
0

我需要在MATLAB中做一個for循環來將矩陣中的每列分開一個單獨的列向量。我只想對矩陣中的列進行選擇,而不是所有的列。在for循環中使用./神祕的MATLAB錯誤

這是我喜歡做的事,其中指數是整數19X1矢量(不是所有連續的數字)的東西,big_matrix是82x24,並且other_column是82x1:

matrix_to_fill = zeros(82,length(Indexes)); 
for x = Indexes 
    new_column = big_matrix(:,x)./other_column; 
    new_index = find(Indexes==x); 
    matrix_to_fill(:,new_index) = new_column; 
end 

當我運行此我得到以下錯誤:

Error using ./ 
Matrix dimensions must agree. 

我可以分別運行每個迭代沒有得到錯誤,所以我知道矩陣尺寸一致。更重要的是,如果我作爲載體打出來的指數,它工作正常:

matrix_to_fill = zeros(82,length(Indexes)); 
for x = [1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,23] 
    new_column = big_matrix(:,x)./other_column; 
    new_index = find(Indexes==x); 
    matrix_to_fill(:,new_index) = new_column; 
end 

而且我覺得「X =索引」語法是好的,因爲我測試過,使用剛:

for x = Indexes 
    disp(x) 
end 

所以我完全難倒了。任何幫助將非常感激!

+1

使用[MATLAB的調試器](http://www.mathworks.com/help/matlab/matlab_prog/debugging-process-and-features.html)或['dbstop if error'](http:// www .mathworks.com/help/matlab/ref/dbstop.html)更具體地說,可以在拋出錯誤時評估工作區。 – excaza

+1

如果你用'repmat(other_column,1,numel(Indexes))'替換循環中的other_column?這很可能是因爲在第一種情況下,您使用'for x = Indexes',並且Matlab一次對所有列執行操作,而如果使用'for x = [1 4 5 ...]',則它循環遍歷每個單獨的「Indexes」元素使尺寸一致。 –

+0

請注意MATLAB中'for'循環的運行方式。 'for'循環可以接受一個**矩陣**作爲輸入,並且循環索引的每次迭代一次接受矩陣的一列。查看重複鏈接的帖子瞭解更多詳情。 'Indexes'是你的情況中的一個列向量,這就是爲什麼MATLAB只迭代這個循環一次。在循環之前,Phil對於轉置'Indexes'的回答解決了你的問題。 – rayryeng

回答

2

問題出在您定義的for循環上。當你說你認爲「x = Indexes」的語法是正確的時候,你沒有足夠的細心去看它是不正確的。

你需要的是

for x = Indexes' 
% Do your looping 
end 

注意在上面轉。

如果你

for x = Indexes 
    disp(x) 
end 

然後循環一旦被執行,其中x承擔整個向量的值。

如果你

for x = Indexes' 
    disp(x) 
end 

那麼x將在矩陣的各個元素,你就會有19個標量顯示,一次,每次通過循環。

+0

雖然這在技術上是正確的,並且您已經注意到爲什麼循環不起作用,但解釋**爲什麼發生這種情況可能是有益的。 MATLAB的'for'循環語法可以接受矩陣作爲輸入,並且循環迭代變量在每次迭代時設置爲矩陣的列。 chappjc的這篇文章可能會提供一些見解:http:// stackoverflow。com/questions/23299617/multiple-loop-variables-matlab – rayryeng

+0

我的答案不僅僅是「技術上」正確的。這是絕對正確的。您的評論提供了更多信息,是的,這就是爲什麼,但不需要回答問題的原因。 –