Перейти к основному содержимому

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

Архитектору Инженеру

Матрица — прямоугольная таблица чисел с строками и столбцами. Элемент в строке i и столбце j обозначают A[i,j] (или Aᵢⱼ). Размер m × n — m строк, n столбцов.

Матрицы строятся из векторов: каждая строка (или столбец) — вектор. В ML batch изображений — матрица (или тензор) пикселей; слой нейросети — матрица весов.


Виды матриц

ВидУсловиеПример 3×3
Произвольнаялюбые m, nлюбая таблица
Квадратнаяm = n3 строки и 3 столбца
Нулеваявсе элементы 0все нули
Диагональнаявне главной диагонали — нулиdiag(2, 5, −1)
Единичная Iдиагональ = 1, остальное 0единицы на диагонали

Главная диагональ — элементы A[0,0], A[1,1], …
Побочная диагональ (для квадратной n×n) — элементы от правого верхнего к левому нижнему углу.


Базовые операции

Вынесение минуса

−A — каждый элемент меняет знак.

A = [[ 3, -2],
[ 0, 4]]
−A = [[-3, 2],
[ 0, -4]]

Сложение и вычитание

Только для матриц одного размера — поэлементно.

A = [[1, 2], B = [[5, 0],
[3, 4]] [−1, 2]]

A + B = [[6, 2],
[2, 6]]

Умножение на число

Каждый элемент умножается на скаляр k.

k = 2, A = [[1, −3],
[0, 4]]

k·A = [[2, −6],
[0, 8]]

Транспонирование Aᵀ

Строки становятся столбцами.

A = [[1, 2, 3],
[4, 5, 6]]

Aᵀ = [[1, 4],
[2, 5],
[3, 6]]

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

A (m×k) × B (k×n) = C (m×n) возможно, когда число столбцов A = число строк B (внутренняя размерность k).

Элемент C[i,j] = скалярное произведение i-й строки A и j-го столбца B:

C[i,j] = Σₜ A[i,t] · B[t,j]

Пример: A (2×2), B (2×3):

A = [[1, 2], B = [[3, 0, −1],
[0, −1]] [2, 1, 4]]

C[0,0] = 1·3 + 2·2 = 7
C[0,1] = 1·0 + 2·1 = 2


C = [[7, 2, 7],
[−2, −1, −4]]

B × A в этом примере не определено: у B три столбца, у A две строки — внутренние размерности не совпадают.

Почему AB ≠ BA (в общем случае)

P = [[1, 0], Q = [[0, 1],
[0, 2]] [1, 0]]

P·Q = [[0, 1], Q·P = [[0, 2],
[2, 0]] [1, 0]]

Порядок множителей меняет результат — как порядок преобразований в графике.


Задачи для тренировки

1. Суммы диагоналей (5×5)

M = [[2, 1, 0, 4, 1],
[0, 3, 5, −1, 2],
[1, 0, 4, 2, 0],
[3, 2, 1, 5, 1],
[0, 1, 2, 0, 6]]
  • Главная диагональ: 2 + 3 + 4 + 5 + 6 = 20
  • Побочная: 1 + (−1) + 1 + 2 + 0 = 3

2. Сумма двух матриц 3×3

A = [[1, 0, 2], B = [[−1, 3, 0],
[2, −1, 1], [1, 2, 2],
[0, 3, 4]] [2, 0, 1]]

A + B = [[0, 3, 2],
[3, 1, 3],
[2, 3, 5]]

3. Единичная матрица 9×9

Постройте циклом: на диагонали 1, вне — 0. Решение — Lab 1129 — практикум.


NumPy


import numpy as np

A = np.array([[1, 2], [0, -1]])
B = np.array([[3, 0, -1], [2, 1, 4]])
C = A @ B # матричное умножение
I = np.eye(3) # единичная 3×3
At = A.T # транспонирование

Теория массивов и справочник функций — 337 — NumPy; практика — Lab 1129.

Дальше: NumPyПерцептрон на NumPy.


Чек-лист самопроверки

  1. Чем вектор-столбец отличается от вектора-строки при умножении на матрицу?
  2. Вычислите скалярное произведение (2, −1) · (3, 4) без калькулятора.
  3. Почему в общем случае AB ≠ BA?
  4. Что такое единичная матрица и зачем np.eye(n)?
  5. Как связаны np.trace(M) и главная диагональ?