Ошибка или особенность: клонирование массива с нарезкой - PullRequest
3 голосов
/ 29 декабря 2010

После ответа Дэвида Моррисси на ' Как клонировать список в python? ' Я проводил несколько тестов производительности и столкнулся с неожиданным поведением при работе с массивами 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 Ответ

11 голосов
/ 29 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...