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]
Исходные данные не копируются.Если исходный объект очень большой, лучше не копировать его, чтобы повысить эффективность использования памяти.
Существует три сценария, в которых документы объясняют, что копия будет сделана в любом случае, даже если вы ее установите.ложно.
, если __array__
возвращает копию.Когда вы преобразуете obj
в массив NumPy с помощью np.array(obj)
, если obj.__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
.