Ошибка или функция: клонирование массива numpy w/slicing

Следуя за Дэвидом Моррисси, ответьте на Как клонировать список в python?" Я выполнял некоторые тесты производительности и сталкивался с неожиданным поведением при работе с массивами w/numpy, Я знаю, что массив numpy может/должен быть клонирован w/

clone = numpy.array(original)

или

clone = numpy.copy(original)

но неправильно предположили, что нарезка тоже сделает трюк. Однако:

In [11]: original = numpy.arange(4)
In [12]: original
Out[12]: array([0, 1, 2, 3])
In [13]: clone = original[:]
In [14]: clone
Out[14]: array([0, 1, 2, 3])
In [15]: clone[0] = 1
In [16]: clone
Out[16]: array([1, 1, 2, 3])
In [17]: original
Out[17]: array([1, 1, 2, 3])

Есть ли веская причина для этой незначительной несогласованности или я должен указать ошибку?

1 ответ

В numpy срезы являются ссылками или "представлениями" в исходном массиве, поэтому они не являются копиями. Это по дизайну, а не ошибка. Причина в том, что копия не так полезна, как представление.

licensed under cc by-sa 3.0 with attribution.