Вектор (Vector)

Вектор - это кортеж из одного или нескольких значений-скаляров. Векторы строятся из компонентов, которые являются обычными числами. Вы можете думать о векторе как о списке чисел, а о векторной алгебре как об операциях, выполняемых над числами в списке.
Векторы являются основополагающим элементом линейной алгебры и используются в Науке о данных при описании Целевой переменной (Target Variable) для создания нейросети.
$$v = (v_1, v_2, v_3)$$
Обычно в Машинном обучении (ML) целевую переменную представляют как вектор 'y'.
Векторы легче понять с использованием геометрической аналогии: вектор представляет точку или координату в n-мерном пространстве, где n – количество измерений, например 2. Его также можно рассматривать как линию от начала векторного пространства с направлением и величиной. А вот скаляр не имеет направления.
Теперь, когда мы знаем, что такое вектор в линейной алгебре, давайте посмотрим, как инициализировать его на Python.
Инициализация вектора
Вектор принято инициализировать как массив NumPy. Например, мы определяем вектор длиной в три элемента и состоящего из целых чисел 1, 2 и 3. Для начала импортируем все необходимые библиотеки:
import numpy as np
from numpy import array
v = array([1, 2, 3])
print(v)
Отобразится вектор так:
[1 2 3]
Векторная арифметика
В этом разделе вы познакомитесь с векторно-скалярной арифметикой, в которой все операции выполняются поэлементно между двумя векторами одинаковой длины, в результате чего получается новый вектор такой же длины.
Сложение векторов
Два вектора равной длины можно сложить вместе.
c = a + b
Новый вектор имеет ту же длину, что и два других. Каждый элемент нового вектора – сумма элементов с тем же индексом; например:
a + b = (a1 + b1, a2 + b2, a3 + b3)
Или, по-другому:
c[0] = a[0] + b[0]
c[1] = a[1] + b[1]
c[2] = a[2] + b[2]
Мы можем складывать векторы прямо в Python, суммируя массивы. В примере ниже определяются два вектора с тремя элементами в каждом, которые затем складываются.
a = array([1, 2, 3])
print(a)
b = array([1, 2, 3])
print(b)
c = a + b
print(c)
При вычислении сначала отображаются два "родительских" вектора, а затем новый вектор-сумма.
[1 2 3]
[1 2 3]
[2 4 6]
Вычитание вектора
Один вектор можно вычесть из другого, такой же длины.
c = a - b
Как и при сложении, новый вектор имеет ту же длину, что и родительские векторы, и каждый элемент нового вектора – разница между элементами векторов с одинаковыми индексами.
a - b = (a1 - b1, a2 - b2, a3 - b3)
Разницу можно представить и так:
c[0] = a[0] - b[0]
c[1] = a[1] - b[1]
c[2] = a[2] - b[2]
Массивами NumPy можно напрямую оперировать следующим образом:
a = array([1, 2, 3])
print(a)
b = array([0.5, 0.5, 0.5])
print(b)
c = a - b
print(c)
В примере мы определяем два вектора с тремя элементами в каждом, а затем вычитает первый из второго. При выполнении кода сначала отображаются два исходных вектора, затем печатается новый, который является разницей.
[1 2 3]
[ 0.5 0.5 0.5]
[ 0.5 1.5 2.5]
Векторное умножение
Два вектора одинаковой длины можно перемножить.
c = a * b
Как и в случае с сложением и вычитанием, эта операция выполняется поэлементно, чтобы получить новый вектор той же длины:
a * b = (a1 * b1, a2 * b2, a3 * b3)
Умножение можно представить и так:
ab = (a1b1, a2b2, a3b3)
или так:
c [0] = a [0] * b [0]
c [1] = a [1] * b [1]
c [2] = a [2] * b [2]
NumPy позволяет ускорить эту вычислительную операцию:
a = array([1, 2, 3])
print(a)
b = array([1, 2, 3])
print(b)
c = a * b
print(c)
В примере определяются два вектора с тремя элементами в каждом, а затем векторы перемножаются. На выводе сначала – два исходных вектора, затем – результирующий.
[1 2 3]
[1 2 3]
[1 4 9]
Векторное деление
Один вектор можно поделить на другой при условии равенства их длин.
c = a / b
Как и другие арифметические операции, эта выполняется поэлементно, чтобы получить новый вектор такой же длины.
a / b = (a1 / b1, a2 / b2, a3 / b3)
Корректно и такое представление:
c[0] = a[0] / b[0]
c[1] = a[1] / b[1]
c[2] = a[2] / b[2]
Мы можем выполнить эту операцию с помощью NumPy.
a = array([1, 2, 3])
print(a)
b = array([1, 2, 3])
print(b)
c = a / b
print(c)
В примере определяются два вектора с тремя элементами в каждом, а затем первый делится на второй.
При выполнении кода сначала отображаются два родительских вектора, а затем вектор-частное.
[1 2 3]
[1 2 3]
[1. 1. 1.]
Векторное перемножение (Dot Product)
Векторное перемножение – это сумма перемноженных элементов векторов одинаковой длины. Название Dot Product происходит от символа, используемого для его обозначения.
c = a . b
Скалярное произведение рассчитывается следующим образом:
a . b = (a1 * b1 + a2 * b2 + a3 * b3)
Мы можем вычислить скалярное произведение, используя функцию dot() библиотеки NumPy.
a = array([1, 2, 3])
print(a)
b = array([1, 2, 3])
print(b)
c = a.dot(b)
print(c)
На выходе мы увидим два исходных вектора, затем скалярное скалярное произведение.
[1 2 3]
[1 2 3]
14
Векторно-скалярное умножение
Вектор может быть умножен на скаляр. В результате мы получим масштабированный вектор, где каждый новый элемент кратен исходному.
Для упрощения обозначений мы будем использовать строчную букву «s» для скалярного значения.
c = s * v
Умножение выполняется поэлементно, чтобы получить новый масштабированный вектор той же длины.
s * v = (s * v1, s * v2, s * v3)
или
c[0] = a[0] * s
c[1] = a[1] * s
c[2] = a[2] * s
NumPy прекрасно справляется и с этой операцией:
a = array([1, 2, 3])
print(a)
s = 0.5
print(s)
c = s * a
print(c)
В примере сначала инициализируется вектор, а затем он умножается на скаляр. Выводом будут исходный вектор, скаляр и результат их перемножения.
[1 2 3]
0.5
[ 0.5 1. 1.5]
Точно так же выполняются векторно-скалярные сложение, вычитание и деление.
Ноутбук, не требующий дополнительной настройки на момент написания статьи, можно скачать здесь.
Фото: @pawel_czerwinski