我得到错误
??? 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
要删除的元素的索引超过了矩阵维度。
当你得到这个错误时,你会发现索引i
是numel(C)/2+1
。换句话说,直到i=5
(在本例中),您将删除C
的每个奇数元素,而在i=6
,C
中剩余的元素数为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
要删除的元素的索引超过了矩阵维度。