簡體   English   中英

matlab:“要刪除的元素索引超出矩陣維度。” 當我不刪除任何元素時

[英]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

??? 要刪除的元素索引超出矩陣維度。

當您收到此錯誤時,您會發現索引inumel(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM