Изменение формы и объединение массивов

Изменение формы и объединение массивов в NumPy являются ключевыми операциями для манипулирования данными и подготовки их к анализу. Рассмотрим эти операции подробно.

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

Изменение формы массива позволяет вам изменять его представление, не изменяя самих данных. Это полезно при работе с многомерными данными и векторизацией.

reshape

Функция reshape изменяет форму массива, сохраняя данные в том же порядке. Новая форма должна содержать такое же количество элементов, как и исходный массив.

import numpy as np

# Исходный массив
a = np.array([1, 2, 3, 4, 5, 6])

# Изменение формы на 2 строки и 3 столбца
reshaped = a.reshape((2, 3))  # array([[1, 2, 3], [4, 5, 6]])
  • Если один из размеров равен -1, NumPy автоматически вычислит его размер:

    reshaped = a.reshape((2, -1))  # array([[1, 2, 3], [4, 5, 6]])

resize

Функция resize изменяет форму массива и может изменить его размер. В отличие от reshape, она создает новый массив, если новые размеры больше, чем старые. Если размер меньше, то лишние элементы будут отброшены.

resized = np.resize(a, (3, 4))  # array([[1, 2, 3, 4], [5, 6, 1, 2], [3, 4, 5, 6]])

ravel и flatten

Функции ravel и flatten преобразуют многомерный массив в одномерный. Разница между ними в том, что ravel возвращает представление массива, если это возможно, в то время как flatten всегда возвращает копию.

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

# ravel возвращает представление массива
flattened_ravel = a.ravel()  # array([1, 2, 3, 4, 5, 6])

# flatten возвращает копию массива
flattened = a.flatten()  # array([1, 2, 3, 4, 5, 6])

transpose и swapaxes

  • transpose меняет местами оси массива. В случае двухмерного массива это просто транспонирование.

    a = np.array([[1, 2], [3, 4]])
    transposed = a.T  # array([[1, 3], [2, 4]])
  • swapaxes меняет местами две оси массива.

    a = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
    swapped = a.swapaxes(0, 1)  # array([[[ 1,  2,  3], [ 7,  8,  9]], [[ 4,  5,  6], [10, 11, 12]]])

Объединение массивов

Объединение массивов позволяет вам комбинировать несколько массивов в один. NumPy предоставляет несколько способов объединения массивов по разным осям.

np.concatenate

Функция concatenate объединяет последовательность массивов вдоль указанной оси. Все массивы должны иметь одинаковую форму, кроме оси объединения.

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[7, 8, 9], [10, 11, 12]])

# Объединение по оси 0 (вертикально)
concatenated_axis0 = np.concatenate((a, b), axis=0)  # array([[ 1,  2,  3], [ 4,  5,  6], [ 7,  8,  9], [10, 11, 12]])

# Объединение по оси 1 (горизонтально)
concatenated_axis1 = np.concatenate((a, b), axis=1)  # array([[ 1,  2,  3,  7,  8,  9], [ 4,  5,  6, 10, 11, 12]])

np.vstack и np.hstack

  • vstack объединяет массивы по вертикали (добавляет строки):

    a = np.array([1, 2, 3])
    b = np.array([4, 5, 6])
    vstacked = np.vstack((a, b))  # array([[1, 2, 3], [4, 5, 6]])
  • hstack объединяет массивы по горизонтали (добавляет столбцы):

    a = np.array([[1], [2], [3]])
    b = np.array([[4], [5], [6]])
    hstacked = np.hstack((a, b))  # array([[1, 4], [2, 5], [3, 6]])

np.stack

Функция stack объединяет массивы по новой оси. Это отличается от concatenate, так как добавляется новая ось.

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# Объединение по новой оси
stacked = np.stack((a, b))  # array([[1, 2, 3], [4, 5, 6]])

np.split, np.hsplit, np.vsplit

Функции для разбиения массива на части:

  • split делит массив на части вдоль указанной оси:

    a = np.array([1, 2, 3, 4, 5, 6])
    split = np.split(a, 3)  # [array([1, 2]), array([3, 4]), array([5, 6])]
  • hsplit и vsplit делят массив по горизонтали и вертикали соответственно:

    a = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
    hsplit = np.hsplit(a, 2)  # [array([[1, 2], [5, 6]]), array([[3, 4], [7, 8]])]
    
    vsplit = np.vsplit(a, 2)  # [array([[1, 2, 3, 4]]), array([[5, 6, 7, 8]])]

Заключение

Изменение формы и объединение массивов в NumPy предоставляет гибкие и мощные средства для манипулирования данными. Эти операции являются основой для подготовки данных к анализу и моделированию, а также для оптимизации производительности при работе с большими объемами данных.

Last updated