Изменение формы массива в NumPy

Изменение формы массива с помощью np.reshape() в NumPy

Одной из наиболее полезных функций NumPy является функция reshape(), которая позволяет изменять форму массива без изменения его данных. Эта статья предоставит всесторонний обзор этой функции с примерами.

Основы reshape()

Прежде чем приступить к примерам, давайте разберемся с тем, что такое "форма" массива. Форма массива - это кортеж, указывающий количество элементов в каждом измерении. Например, у массива размером (3, 4) есть 3 строки и 4 столбца.

Функция reshape() позволяет изменять эту форму, распределяя элементы массива по новым измерениям.

Синтаксис

Давайте подробно разберем синтаксис этой функции.

numpy.ndarray.reshape(shape, order='C')
  • shape: Это кортеж, который определяет новую форму массива. Например, (2, 3) создаст массив с 2 строками и 3 столбцами.
  • order (необязательный): Этот параметр определяет, в каком порядке следует читать элементы исходного массива. По умолчанию используется порядок C (C-style, где последний индекс изменяется быстрее всего). Альтернативный порядок - F (Fortran-style, где первый индекс изменяется быстрее всего).

Простой пример

import numpy as np

# Создаем одномерный массив
arr = np.array([1, 2, 3, 4, 5, 6])
print(arr)  # [1 2 3 4 5 6]

# Изменяем форму массива на двумерный размером 2x3
reshaped_arr = arr.reshape(2, 3)
print(reshaped_arr)
# [[1 2 3]
#  [4 5 6]]

Основные принципы

  • Общее количество элементов должно оставаться неизменным. При попытке выполнить reshape() для массива с 10 элементами в форму (3, 4) вы получите ошибку, так как общее количество элементов в новой форме (12) отличается от исходного (10).
  • Аргумент -1 для автоматического вычисления размерности. Если вы не уверены в размере одного из измерений, можете использовать -1, и NumPy автоматически вычислит правильный размер.
arr = np.array([1, 2, 3, 4, 5, 6])

# Используем -1 для автоматического вычисления количества строк
reshaped_arr = arr.reshape(-1, 3)
print(reshaped_arr)
# [[1 2 3]
#  [4 5 6]]

Работа с многомерными массивами

reshape() не ограничивается только одномерными массивами. Вы можете изменять форму и многомерных массивов.

# Создаем массив размером 3x2
arr = np.array([[1, 2], [3, 4], [5, 6]])
print(arr)
# [[1 2]
#  [3 4]
#  [5 6]]

# Изменяем форму на 2x3
reshaped_arr = arr.reshape(2, 3)
print(reshaped_arr)
# [[1 2 3]
#  [4 5 6]]

Переход от многомерного массива к одномерному

Чтобы "развернуть" многомерный массив в одномерный, используйте reshape(-1):

arr = np.array([[1, 2], [3, 4], [5, 6]])
flattened_arr = arr.reshape(-1)
print(flattened_arr)  # [1 2 3 4 5 6]

Заключение

Функция reshape() является одним из основных инструментов в арсенале разработчика при работе с NumPy. Она предоставляет гибкость при моделировании данных и может быть использована в широком диапазоне приложений, от обработки изображений до анализа временных рядов.

Содержание: