我在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)
时?
答案 0 :(得分:7)
当您写入数组中先前不存在的元素时,该数组将扩充为新大小,并且在数字数组的情况下用零填充,或者使用例如数组填充空元素。细胞或结构。这样做是为了您的方便,因为自己增加阵列需要大量输入。请注意,对于实际代码,您可能经常希望避免像这样更改数组大小,因为它可能会降低可读性,并且如果在具有多次迭代的循环内生成这样的数组,它会显着影响性能。因此,通常最好将阵列预分配到正确的大小(这样可以让您控制填充值)。
如果要读取不存在的元素,则无法读取任何内容。可以想象,Matlab可以返回0或NaN
,但读取超出界限的可能性要小于写作,因此Matlab会抛出错误。