о копии логического параметра в функции np.array - PullRequest
0 голосов
/ 09 марта 2019

Я не понимаю значения параметра copy = True в функции np.array. Я просмотрел документацию, но не смог ее понять. Можете ли вы объяснить это простыми словами для меня

1 Ответ

1 голос
/ 09 марта 2019

https://www.numpy.org/devdocs/reference/generated/numpy.array.html

копия: bool , опционально

Если true (по умолчанию),затем объект копируется.В противном случае копия будет сделана только в том случае, если __array__ вернет копию, если obj является вложенной последовательностью или если копия требуется для удовлетворения любых других требований (dtype, order и т. Д.).

Когда вы передаете другой массив NumPy в np.array, вы можете либо скопировать его содержимое в новый объект в памяти, либо не делать этого.Обычно вы хотите копировать, потому что вы не хотите изменять исходный массив, но есть обстоятельства, когда это нехорошо.При записи

a1 = np.array([1, 2, 3])
a2 = np.array(a1, copy=False)
a1[0] = 50
print(a1)
# [50, 2, 3]
print(a2)
# [50  2  3]

Исходные данные не копируются.Если исходный объект очень большой, лучше не копировать его, чтобы повысить эффективность использования памяти.

Существует три сценария, в которых документы объясняют, что копия будет сделана в любом случае, даже если вы ее установите.ложно.

  1. , если __array__ возвращает копию.Когда вы преобразуете obj в массив NumPy с помощью np.array(obj), если obj.__array__ возвращает копию содержимого своего массива, тогда объект NUMPY также будет содержать копию.

  2. Илиесли копия необходима для удовлетворения любых других требований.

Вот пример этого.

orig = np.array([1, 2, 3])
modified = np.array(orig, dtype=float, copy=False)
modified[0] = 50
print(modified)
# [50.  2.  3.]
print(orig)
# [1, 2, 3]

В приведенном выше примере вы просите numpy преобразовать все данные в float.Это не может быть сделано без копирования данных в новый объект.Таким образом, «копия необходима для удовлетворения этого требования».numpy будет игнорировать copy=False.

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