Эффективная работа с формой массивов является фундаментальной для эффективной обработки данных с помощью NumPy. В этом руководстве рассматриваются две основные функции для изменения формы и размера массивов NumPy: reshape()
и resize()
. Мы изучим их функциональность, тонкие различия и лучшие практики, чтобы вы могли уверенно использовать их в своих проектах по обработке данных.
Содержание
1. numpy.reshape()
Функция numpy.reshape()
— универсальный инструмент для изменения формы массива NumPy без изменения его исходных данных. Она требует массив и желаемую новую форму в качестве входных данных. Важно, что новая форма должна быть совместима с размером исходного массива (общее количество элементов должно оставаться неизменным).
import numpy as np
arr = np.arange(12) # Создает массив [0, 1, 2, ..., 11]
print("Исходный массив:n", arr)
reshaped_arr = np.reshape(arr, (3, 4)) # Изменение формы на 3x4 матрицу
print("nИзмененный массив:n", reshaped_arr)
#Использование -1 для автоматического расчета размерности
auto_reshape = np.reshape(arr, (-1, 3))
print("nМассив с автоматическим изменением формы:n", auto_reshape)
#Обработка ошибок для несовместимых форм
try:
invalid_reshape = np.reshape(arr, (2,7))
print(invalid_reshape)
except ValueError as e:
print(f"nОшибка: {e}")
2. ndarray.reshape()
Метод ndarray.reshape()
предоставляет альтернативный подход, работающий непосредственно с существующим объектом ndarray
. Его функциональность идентична numpy.reshape()
; единственное различие заключается в способе вызова.
arr = np.arange(12)
reshaped_arr = arr.reshape((4, 3)) # Вызов метода
print("nИзмененный массив (вызов метода):n", reshaped_arr)
3. Особенности разделяемой памяти
Как numpy.reshape()
, так и ndarray.reshape()
обычно работают на месте. Это означает, что они не создают копию данных массива; вместо этого они изменяют представление исходных данных. Это очень эффективно с точки зрения памяти. Изменения в измененном массиве отражаются в исходном, и наоборот. Однако это также требует осторожности, особенно если вам нужно сохранить содержимое исходного массива. Чтобы создать копию, используйте метод .copy()
:
arr = np.arange(12)
reshaped_arr = arr.reshape((3,4))
reshaped_arr[0,0] = 99 # Также изменяет исходный массив!
print("nИсходный массив после изменения формы:n", arr)
arr = np.arange(12)
reshaped_arr_copy = arr.reshape((3,4)).copy() #Создает копию
reshaped_arr_copy[0,0] = 100 # Изменяет только копию
print("nИсходный массив после изменения копии:n", arr)
4. numpy.resize()
Функция numpy.resize()
позволяет изменять размер массива, в отличие от reshape()
, которая сохраняет общее количество элементов. resize()
может изменять количество элементов. Если новый размер больше, массив дополняется нулями или повторяющимися элементами. Если меньше, элементы усекаются. Важно отметить, что resize()
*всегда* возвращает новый массив; она не изменяет исходный на месте.
arr = np.arange(5)
resized_arr = np.resize(arr, (8,)) # Изменение размера до длины 8
print("nИзмененный массив (дополненный нулями):n", resized_arr)
resized_arr_2 = np.resize(arr,(2,)) #Изменение размера до длины 2
print("nИзмененный массив (обрезанный):n", resized_arr_2)
resized_arr_3 = np.resize(arr, (2,3)) #Изменение размера до 2x3, будет повторять массив
print("nИзмененный массив (повторяющийся):n", resized_arr_3)
Это руководство содержит исчерпывающий обзор изменения формы и размера массивов NumPy. Овладение этими методами имеет важное значение для эффективной обработки данных в научных вычислениях и обработке данных.