Массивы Numpy и оператор идентификации

Имея массив numpy, такой как x, и срез, который включает все его элементы как z, почему операторы идентификации дают false, несмотря на то, что изменение значения любого элемента в z отражается на x и наоборот

      x = np.array([1, 2, 3, 4, 5])

z = x[:]

x is z 

# Output:
False

1 ответ

Из Numpy Internals:

Массивы NumPy состоят из двух основных компонентов: необработанных данных массива (далее называемых буфером данных) и информации о необработанных данных массива.

в случае нарезки z = x[:], это представление, NumPy хранит значительный набор данных, который описывает, как интерпретировать данные в буфере данных в другом месте памяти, но он может совместно использовать элементы из , следовательно, оба имеют разные идентификаторы и, следовательно, False.

      >>> x = np.array([1, 2, 3, 4, 5])
>>> z = x[:] # same as x.view()
>>> x[2]
3
>>> x[2] = 1
>>> x
array([1, 2, 1, 4, 5])
>>> z
array([1, 2, 1, 4, 5])
>>> x is z
False

Если вы измените x, zтакже будут изменены. Дополнительные ссылки в документации Numpy

Другие вопросы по тегам