1

我在 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].

a最初的大小不是1 乘 2 吗?为什么我写信时它不会抱怨越界,a(3, 4)而只有当我阅读时才抱怨a(5, 4)

4

1 回答 1

8

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

当你想读取一个不存在的元素时,没有什么可以读取的。可以想象,Matlab 可以返回 0 或NaN,但越界读取比写入更不可能故意发生,因此 Matlab 会抛出错误。

于 2011-03-07T15:18:34.993 回答