當我運行這個程序時,出現錯誤信息:關於Matlab中矩陣的維數的錯誤信息
???索引超過矩陣尺寸。
錯誤在==>如果(1,i)== 0
你能告訴我爲什麼嗎?
a = randi(5,4,100)-ones(4,100);
[n m]=size(a);
for i=1:m
if a(1,i)==0
a(:,i)=[];
end
end
當我運行這個程序時,出現錯誤信息:關於Matlab中矩陣的維數的錯誤信息
???索引超過矩陣尺寸。
錯誤在==>如果(1,i)== 0
你能告訴我爲什麼嗎?
a = randi(5,4,100)-ones(4,100);
[n m]=size(a);
for i=1:m
if a(1,i)==0
a(:,i)=[];
end
end
原因是你正在從你的矩陣中刪除列,所以在for循環中你正在減少它的維數。然後,在刪除列之前,嘗試訪問具有指向原始矩陣的索引的列。
試試這個:
a = randi(5,4,100)-1;
ind2remove = (a(1,:) == 0);
a(:,ind2remove) = [];
你,因爲這for
循環的執行過程中得到這個錯誤,你可能會刪除一些列。因此矩陣的尺寸會減小,您將嘗試訪問已移動到不同位置的元素。
要做到這一點,你必須編寫一個while
循環,手動檢查索引。另一種解決方案是像itamar Katz所展示的那樣向量化您的解決方案。該解決方案比編寫一個while
循環更符合MATLAB。
但我注意到,允許隨機算法發出隨機長度的矢量有時可能比固定長度的矢量更難以處理。所以你可能想要構建你的矢量,你甚至不需要刪除這些條目,這取決於你的應用程序,這可以通過用不同指令生成第一行和其他行來完成。
隨機向量只是爲了驗證我的程序的準確性。 – bzak 2012-01-01 10:37:52