matlab:"Index of element to remove exceeds matrix dimensions."当我不删除任何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{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=6C中剩余的元素数为5,因此您将得到一个索引越界错误。


注意:

CCD_ 16甚至不需要完全为空。考虑这个例子:

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

要删除的元素的索引超过了矩阵维度。

最新更新