当我运行此程序时,收到错误消息:
???指数超过矩阵尺寸 ==>中的错误如果a(1,i)== 0
你可以告诉我为什么吗?a = randi(5,4,100)-ones(4,100);
[n m]=size(a);
for i=1:m
if a(1,i)==0
a(:,i)=[];
end
end
答案 0 :(得分:3)
原因是您要从矩阵中删除列,因此在for循环中您将减小其维度。然后,在删除列之前,尝试访问具有引用原始矩阵的索引的列。
请改为尝试:
a = randi(5,4,100)-1;
ind2remove = (a(1,:) == 0);
a(:,ind2remove) = [];
答案 1 :(得分:0)
您收到该错误是因为在执行此for
循环期间,您可能会删除一些列。因此,矩阵的尺寸将减小,您将尝试访问已移动到其他位置的元素。
要做你想要的,你要么必须写一个while
循环,要手动检查索引。另一种解决方案是像Katamar所展示的那样对您的解决方案进行矢量化。该解决方案比写while
循环更具MATLAB格式。
但我注意到,允许随机算法发出随机长度的矢量有时会比固定长度矢量更难处理。因此,您可能希望以这样的方式构造向量,即使您不必删除此类条目,具体取决于您的应用程序,这可以通过生成第一行和其他具有不同指令的行来完成。