#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.
-
if
__array__
возвращает копию. Когда вы преобразуетеobj
в массив numpy с помощьюnp.array(obj)
, ifobj.__array__
возвращает копию содержимого массива, тогда объект numpy также будет содержать копию. -
Или если копия необходима для удовлетворения любого из других требований.
Вот пример этого.
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
.