在Matlab中没有出界

时间:2011-03-07 15:15:34

标签: matlab outofrangeexception

我在Matlab中注意到以下内容。

>> a = [1, 3];
>> a(3, 4) = 1
a =

 1     2     0     0
 0     0     0     0
 0     0     0     1
>> a(5, 4)
??? Attempted to access a(5,4); index out of bounds because size(a)=[3,4].

最初是不是{1}的大小为1乘2?当我写a时,为什么它不会抱怨,但只有当我读a(3, 4)时?

1 个答案:

答案 0 :(得分:7)

当您写入数组中先前不存在的元素时,该数组将扩充为新大小,并且在数字数组的情况下用零填充,或者使用例如数组填充空元素。细胞或结构。这样做是为了您的方便,因为自己增加阵列需要大量输入。请注意,对于实际代码,您可能经常希望避免像这样更改数组大小,因为它可能会降低可读性,并且如果在具有多次迭代的循环内生成这样的数组,它会显着影响性能。因此,通常最好将阵列预分配到正确的大小(这样可以让您控制填充值)。

如果要读取不存在的元素,则无法读取任何内容。可以想象,Matlab可以返回0或NaN,但读取超出界限的可能性要小于写作,因此Matlab会抛出错误。