Нет вне границ в Matlab - PullRequest
1 голос
/ 07 марта 2011

Я заметил следующее в 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)?

1 Ответ

7 голосов
/ 07 марта 2011

Когда вы записываете в ранее не существующий элемент в массиве, массив увеличивается до нового размера и дополняется нулями в случае числового массива, или пустых элементов, например, с. клетки или структуры. Это сделано для вашего удобства, так как для увеличения массива требуется много печатать. Обратите внимание, что для реального кода вы часто можете избежать изменения размера массива, как это, так как это может снизить читабельность, и это может заметно повлиять на производительность, если вы вырастите такой массив внутри цикла с большим количеством итераций. Таким образом, обычно лучше заранее назначить массивы правильного размера (что дает дополнительное преимущество, позволяя вам контролировать значение заполнения).

Когда вы хотите прочитать несуществующий элемент, вы ничего не можете прочитать. Очевидно, что Matlab мог бы вернуть 0 или NaN, но чтение за пределами гораздо менее вероятно, что это произойдет преднамеренно, чем запись, поэтому Matlab выдает ошибку.

...