Разница между array.copy () и numpy.copy (массив) - PullRequest
2 голосов
/ 07 мая 2019

Я только что посмотрел на следующую нудистскую инфографику.

https://s3.amazonaws.com/assets.datacamp.com/blog_assets/Numpy_Python_Cheat_Sheet.pdf

Мне интересно, есть ли разница между np.copy(a) и a.copy() - или это просто синонимы для одной и той же операции?

1 Ответ

4 голосов
/ 07 мая 2019

Если a равно numpy.array, результат будет таким же.Но если a является чем-то другим, a.copy() вернет тот же тип, что и a, или потерпит неудачу в зависимости от его типа, а np.copy(a) всегда вернет numpy.array.Попробуйте, например, следующее:

import pandas as pd

for x in (list(range(3)), np.array(range(3)), pd.Series(range(3))):
    print()
    print(repr(x.copy()))
    print(repr(np.copy(x)))

UPD: есть еще одно отличие.Оба метода имеют дополнительный аргумент order, определяющий порядок памяти в копии с различными значениями по умолчанию.В np.copy это 'K', что означает «Использовать порядок как можно ближе к оригиналу», а в ndarray.copy это 'C' (Использовать C-порядок).Например,

x = np.array([[1,2,3],[4,5,6]], order='F')
for y in [x, np.copy(x), x.copy()]:
    print(y.flags['C_CONTIGUOUS'], y.flags['F_CONTIGUOUS'])

Напечатает

False True
False True
True False

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

x = np.array([1, [1,2,3]])
y = x.copy()
z = np.copy(x)
y[1][1] = -2
z[1][2] = -3
print(x)
print(y)
print(z)

Все три напечатанные строки:

[1 list([1, -2, -3])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...