没有在Matlab中出界

sin*_*ity 1 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].
Run Code Online (Sandbox Code Playgroud)

a最初的尺寸不是1比2?当我写信时,为什么它不会抱怨,a(3, 4)但只有在我读书时a(5, 4)
谁能帮我理解?
提前致谢.

Jon*_*nas 7

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

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