Что такое вектор и как его складывать
Вектор — это одновременно стрелка в пространстве и список чисел; обе картинки описывают одно и то же.
Вектор — направленный отрезок, заданный своими координатами; в линейной алгебре это просто упорядоченный список чисел, с которым умеют складываться и масштабироваться.
Когда мы пишем $\vec{v} = (3, 4)$, мы имеем в виду стрелку из начала координат в точку с координатами 3 по горизонтали и 4 по вертикали. Но та же запись — это и «два числа в строчке», над которыми можно выполнять арифметику. Вся сила линейной алгебры в том, что геометрическая картинка (стрелка) и арифметика (список чисел) — это одно и то же, и мы свободно переключаемся между ними.
Зачем это нужно
Скорость, сила, сдвиг пикселя, признаки объекта в машинном обучении, цвет в формате RGB — всё это векторы. Если научиться складывать и масштабировать стрелки, открывается единый аппарат: одно правило работает и для физики, и для графики, и для данных. Поэтому начинаем с самого простого действия — сложения.
Сложение векторов
Геометрически складывают стрелки по правилу треугольника: приставляем начало второй стрелки к концу первой, а сумма — стрелка от начала первой к концу второй. Арифметически это значит просто сложить координаты по отдельности:
$$\vec{a} + \vec{b} = (a_1 + b_1,\; a_2 + b_2)$$
Умножение на число $k$ растягивает стрелку в $k$ раз (а при отрицательном $k$ — ещё и разворачивает):
$$k \cdot \vec{a} = (k a_1,\; k a_2)$$
def add(a, b):
return [x + y for x, y in zip(a, b)]
def scale(k, a):
return [k * x for x in a]
a = [3, 4]
b = [1, -2]
print("a + b =", add(a, b))
print("2a =", scale(2, a))
print("a - b =", add(a, scale(-1, b)))Вывод:
a + b = [4, 2] 2a = [6, 8] a - b = [2, 6]
Векторы любой размерности
Стрелку на плоскости легко нарисовать, но формула не меняется и для трёх, и для ста координат. Вектор в $n$-мерном пространстве — это просто список из $n$ чисел, и сложение по-прежнему идёт покоординатно. Рисовать мы уже не можем, а считать — запросто.
Как работает под капотом
В программе вектор — это обычный список [3, 4]. Функция zip(a, b) идёт по двум спискам параллельно, выдавая пары (3, 1), (4, -2), а генератор списка складывает каждую пару. Никакой магии: «сложение векторов» — это цикл по координатам. Важно, что складывать можно только векторы одной длины; если размерности разные, операция не определена — zip молча обрежет лишнее, и это частый источник скрытых ошибок.
Частые ошибки
- Путать точку и вектор. Точка — это «где», вектор — «куда и насколько». Координаты записываются одинаково, но точку нельзя умножить на число осмысленно, а вектор — можно.
- Складывать векторы разной размерности. $(1, 2)$ и $(1, 2, 3)$ сложить нельзя — это разные пространства.
- Думать, что начало вектора обязательно в нуле. Стрелку можно нарисовать где угодно; важны только её длина и направление, то есть разности координат.
Итог
- Вектор — это и стрелка, и список чисел одновременно.
- Складывают векторы покоординатно (геометрически — по правилу треугольника).
- Умножение на число масштабирует стрелку, отрицательное — разворачивает.
- Формулы не зависят от размерности: тот же код работает в $n$ измерениях.