问题描述
|
我得到错误
??? 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
的元素,最终,索引ѭ11vector超出了(现已减小)向量的大小。
这是一个重现您的问题的小示例:
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
(在此示例中),您将删除removing10ѭ的每个奇数元素,而在at17ѭ处,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
???要删除的元素索引超过矩阵尺寸。