关于Matlab中矩阵维数的错误信息

时间:2012-01-01 10:03:49

标签: matlab

当我运行此程序时,收到错误消息:

???指数超过矩阵尺寸 ==>中的错误如果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

2 个答案:

答案 0 :(得分:3)

原因是您要从矩阵中删除列,因此在for循环中您将减小其维度。然后,在删除列之前,尝试访问具有引用原始矩阵的索引的列。

请改为尝试:

a = randi(5,4,100)-1;
ind2remove = (a(1,:) == 0);
a(:,ind2remove) = [];

答案 1 :(得分:0)

您收到该错误是因为在执行此for循环期间,您可能会删除一些列。因此,矩阵的尺寸将减小,您将尝试访问已移动到其他位置的元素。

要做你想要的,你要么必须写一个while循环,要手动检查索引。另一种解决方案是像Katamar所展示的那样对您的解决方案进行矢量化。该解决方案比写while循环更具MATLAB格式。

但我注意到,允许随机算法发出随机长度的矢量有时会比固定长度矢量更难处理。因此,您可能希望以这样的方式构造向量,即使您不必删除此类条目,具体取决于您的应用程序,这可以通过生成第一行和其他具有不同指令的行来完成。