о копировании логического параметра в функции np.array

#python #numpy

#python #numpy

Вопрос:

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

Комментарии:

1. Не беспокойтесь об этом слишком сильно. Большинство пользователей им не пользуются. По умолчанию большую часть времени все в порядке.

Ответ №1:

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]
  

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

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

  1. if __array__ возвращает копию. Когда вы преобразуете obj в массив numpy с помощью np.array(obj) , if 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 .