2012-01-01 68 views
1

当我运行这个程序时,出现错误信息:关于Matlab中矩阵的维数的错误信息

???索引超过矩阵尺寸。
错误在==>如果(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 

回答

3

原因是你正在从你的矩阵中删除列,所以在for循环中你正在减少它的维数。然后,在删除列之前,尝试访问具有指向原始矩阵的索引的列。

试试这个:

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

你,因为这for循环的执行过程中得到这个错误,你可能会删除一些列。因此矩阵的尺寸会减小,您将尝试访问已移动到不同位置的元素。

要做到这一点,你必须编写一个while循环,手动检查索引。另一种解决方案是像itamar Katz所展示的那样向量化您的解决方案。该解决方案比编写一个while循环更符合MATLAB。

但我注意到,允许随机算法发出随机长度的矢量有时可能比固定长度的矢量更难以处理。所以你可能想要构建你的矢量,你甚至不需要删除这些条目,这取决于你的应用程序,这可以通过用不同指令生成第一行和其他行来完成。

+0

随机向量只是为了验证我的程序的准确性。 – bzak 2012-01-01 10:37:52