Копирование и представление в NumPy

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом руководстве вы узнаете о концепциях копирования и представления для ndarray в библиотеке NumPy. Вы научитесь использовать функции copy() и view() для создания нового копирования существующего массива или создания нового представления для массива. Также вы узнаете разницу между копированием и представлением и, как они по-разному ведут себя.

Советы по работе с ВМ

После завершения запуска ВМ нажмите в верхнем левом углу, чтобы переключиться на вкладку Ноутбук, чтобы получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Проверка операций не может быть автоматизирована из-за ограничений в Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Разница между копированием и представлением

Основная разница между копированием и представлением заключается в том, что функция copy() создает новый массив, в то время как функция view() создает новое представление исходного массива. Когда мы создаем новую копию входного массива, она хранится в другом месте в памяти, но когда мы создаем представление, оно ссылается на то же место в памяти, что и исходный массив. Это означает, что любые изменения, внесенные в копию входного массива, не повлияют на исходный массив, и наоборот. Однако любые изменения, внесенные в представление, повлияют на исходный массив, и наоборот.

Нет копирования или присваивания массива

Если вы присваиваете массив NumPy другому массиву, это не создает прямой копии исходного массива. Вместо этого создается другой массив с тем же содержимым и идентификатором, который становится ссылкой на исходный массив. Если вы вносят любые изменения в этот массив-ссылку, они непосредственно отражаются в исходном массиве.

import numpy as np

input_arr = np.array([[5,2,7,4],[9,0,2,3],[1,2,3,19]])
print("The Original Array is :\n")
print(input_arr)
print("\nThe ID of array a:")
print(id(input_arr))

b = input_arr #присваиваем input_arr к b
print("\nNow we make the copy of the input_arr")
print("\nThe ID of b:")
print(id(b))
b.shape = 4, 3 #делаем некоторые изменения в b
print("\nThe Changes on b also reflect to a:")
print(input_arr)

Копирование в NumPy или глубокое копирование

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

Для создания глубокой копии входного массива мы можем использовать функцию numpy.ndarray.copy().

import numpy as np

## Создадим массив
a = np.array([5, 4, 6, 8, 9])

## Создадим копию входного массива
c = a.copy()

## Теперь проверим идентификаторы a и c
print("The id of input array a:")
print(id(a))
print("The id of c is:")
print(id(c))

## Теперь изменим исходный массив
a[0] = 25

## Выведем исходный массив и копию
print("The original array:")
print(a)
print("The copy is:")
print(c)

Представление в NumPy или поверхностное копирование

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

Для создания представления входного массива мы можем использовать функцию numpy.ndarray.view().

import numpy as np

## задан входной массив
ar = np.array([2, 4, 6, 8, 10, 12])

## создаем представление
v = ar.view()

## Теперь и ar, и v будут иметь разные идентификаторы
print("The id of ar")
print(id(ar))
print("The id of v")
print(id(v))

## изменение исходного массива также повлияет на представление
ar[3] = 16

## выводим исходный массив и представление
print("The original array:")
print(ar)
print("The view:")
print(v)

Резюме

В этом уроке вы узнали о концепциях копирования и представления для ndarray в библиотеке NumPy. Вы узнали, как использовать функции copy() и view() для создания новой копии существующего массива или создания нового представления для массива. Вы также узнали разницу между копированием и представлением и, как они ведут себя по-разному. Мы рекомендуем практиковать эти концепции с дополнительными примерами.