[英]matlab: “Index of element to remove exceeds matrix dimensions.” When I am not removing any elemens
我得到錯誤
??? Index of element to remove exceeds matrix dimensions.
Error in ==> myfile at 111
C(i)=s{i,3};
代碼是:
C=zeros(num_of_tris,1);
for i=1:size(C,1)
C(i)=s{i,3};
end
我沒有展示創建s
的代碼,但我認為它不是重點,因為s
只出現在作業的右側......
為什么它說element to remove
? 我要刪除哪個元素?
好的,這就是正在發生的事情。 s
可能被初始化為一個空單元格(注意:不必完全為空——見最后一段)。 因此,將 s 的元素索引為s
s{i,3}
會返回[]
。 刪除向量元素的 MATLAB 操作是
C(i)=[];
因此,當您遍歷時,您將一個一個地刪除C
的元素,最終,索引i
超過了(現在減小的)向量的大小。
這是一個重現您的問題的小示例:
s=cell(10,5); %#initialize s to an empty cell
%#note that any cell returns []
s{3,4}
ans =
[]
%#This is your code from above
C=zeros(10,1); %#initialize C
for i=1:size(C,1)
C(i)=s{i,3};
end
??? 要刪除的元素索引超出矩陣維度。
當您收到此錯誤時,您會發現索引i
是numel(C)/2+1
。 換句話說,直到i=5
(在此示例中),您將刪除C
的每個奇數元素,並且在i=6
時, C
中剩余的元素數為 5,因此您會得到一個索引超出范圍錯誤。
s
甚至不必完全為空。 考慮這個例子:
s=cell(10,1);
s([1,2,6,8])=num2cell(rand(4,1));
C=zeros(10,1);
for i=1:numel(C)
C(i)=s{i};
end
??? 要刪除的元素索引超出矩陣維度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.