Транспонирование и манипуляции с матрицами

Транспонирование и манипуляции с матрицами — это ключевые операции при работе с линейной алгеброй и многомерными массивами в NumPy. Эти операции позволяют эффективно изменять форму, поворачивать и комбинировать матрицы, что важно для анализа данных и математических вычислений.

Транспонирование матриц

Транспонирование матрицы — это операция, которая меняет местами строки и столбцы матрицы. Например, если у вас есть матрица ( A ) размером ( 2 \times 3 ), то транспонированная матрица ( A^T ) будет иметь размер ( 3 \times 2 ).

Использование атрибута .T

Самый простой способ транспонировать матрицу в NumPy — использовать атрибут .T.

import numpy as np

# Создаем матрицу 2x3
A = np.array([[1, 2, 3], [4, 5, 6]])

# Транспонируем матрицу
A_T = A.T
print(A_T)
# Вывод:
# [[1 4]
#  [2 5]
#  [3 6]]

Использование функции np.transpose

Функция np.transpose предоставляет дополнительную гибкость, позволяя указывать порядок осей для многомерных массивов.

# Транспонируем матрицу с использованием np.transpose
A_T = np.transpose(A)
print(A_T)
# Результат будет таким же, как и при использовании .T

Для многомерных массивов можно указывать порядок осей:

B = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])

# Транспонирование с изменением порядка осей
B_T = np.transpose(B, (1, 0, 2))
print(B_T)

Изменение формы матрицы

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

Функция reshape

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

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

# Изменяем форму на 2x3
C_reshaped = C.reshape(2, 3)
print(C_reshaped)
# Вывод:
# [[1 2 3]
#  [4 5 6]]

Если указать один из размеров как -1, NumPy автоматически определит его значение:

C_reshaped_auto = C.reshape(3, -1)
print(C_reshaped_auto)
# Вывод:
# [[1 2]
#  [3 4]
#  [5 6]]

Объединение матриц

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

np.hstack

Функция hstack используется для горизонтального объединения матриц (по оси 1).

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

# Горизонтальное объединение
C = np.hstack((A, B))
print(C)
# Вывод:
# [[ 1  2  3  7  8  9]
#  [ 4  5  6 10 11 12]]

np.vstack

Функция vstack используется для вертикального объединения матриц (по оси 0).

# Вертикальное объединение
D = np.vstack((A, B))
print(D)
# Вывод:
# [[ 1  2  3]
#  [ 4  5  6]
#  [ 7  8  9]
#  [10 11 12]]

np.concatenate

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

# Объединение вдоль оси 0
E = np.concatenate((A, B), axis=0)
print(E)
# Объединение вдоль оси 1
F = np.concatenate((A, B), axis=1)
print(F)

Разбиение матриц

NumPy также позволяет разделять матрицы на несколько частей.

np.hsplit

Функция hsplit разбивает матрицу по горизонтали на несколько частей.

# Разбиение на 3 части по горизонтали
G = np.hsplit(A, 3)
print(G)
# Вывод:
# [array([[1],
#        [4]]), 
#  array([[2],
#        [5]]), 
#  array([[3],
#        [6]])]

np.vsplit

Функция vsplit разбивает матрицу по вертикали.

# Разбиение на 2 части по вертикали
H = np.vsplit(A, 2)
print(H)
# Вывод:
# [array([[1, 2, 3]]), 
#  array([[4, 5, 6]])]

np.split

Функция split позволяет разделять массивы вдоль заданной оси.

# Разбиение по оси 0
I = np.split(A, 2, axis=0)
print(I)
# Разбиение по оси 1
J = np.split(A, 3, axis=1)
print(J)

Матричные операции

NumPy поддерживает широкий набор матричных операций, таких как умножение матриц, вычисление детерминанта и обращение матриц.

Умножение матриц

Для матричного умножения используется функция np.dot или оператор @.

A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

# Матричное умножение
C = np.dot(A, B)
# Или эквивалентно
C = A @ B
print(C)
# Вывод:
# [[19 22]
#  [43 50]]

Определитель матрицы

Функция np.linalg.det вычисляет детерминант квадратной матрицы.

# Определитель матрицы
det_A = np.linalg.det(A)
print(det_A)  # -2.0000000000000004

Обращение матрицы

Функция np.linalg.inv вычисляет обратную матрицу, если она существует.

# Обратная матрица
inv_A = np.linalg.inv(A)
print(inv_A)
# Вывод:
# [[-2.   1. ]
#  [ 1.5 -0.5]]

Скалярное произведение

Функция np.inner вычисляет скалярное произведение двух массивов.

v = np.array([1, 2, 3])
w = np.array([4, 5, 6])

# Скалярное произведение
dot_product = np.inner(v, w)
print(dot_product)  # 32

Заключение

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

Last updated