NumPy Tutorials

Мастерство работы с изменением формы и размера массивов NumPy

Spread the love

Эффективная работа с формой массивов является фундаментальной для эффективной обработки данных с помощью NumPy. В этом руководстве рассматриваются две основные функции для изменения формы и размера массивов NumPy: reshape() и resize(). Мы изучим их функциональность, тонкие различия и лучшие практики, чтобы вы могли уверенно использовать их в своих проектах по обработке данных.

Содержание

  1. numpy.reshape()
  2. ndarray.reshape()
  3. Особенности разделяемой памяти
  4. numpy.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. Овладение этими методами имеет важное значение для эффективной обработки данных в научных вычислениях и обработке данных.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *