我需要在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
所以我完全難倒了。任何幫助將非常感激!
使用[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
如果你用'repmat(other_column,1,numel(Indexes))'替換循環中的other_column?這很可能是因爲在第一種情況下,您使用'for x = Indexes',並且Matlab一次對所有列執行操作,而如果使用'for x = [1 4 5 ...]',則它循環遍歷每個單獨的「Indexes」元素使尺寸一致。 –
請注意MATLAB中'for'循環的運行方式。 'for'循環可以接受一個**矩陣**作爲輸入,並且循環索引的每次迭代一次接受矩陣的一列。查看重複鏈接的帖子瞭解更多詳情。 'Indexes'是你的情況中的一個列向量,這就是爲什麼MATLAB只迭代這個循環一次。在循環之前,Phil對於轉置'Indexes'的回答解決了你的問題。 – rayryeng