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

Функции расстояния

L1Distance

Впервые появилась в версии v21.11.

Вычисляет расстояние между двумя точками (элементы векторов выступают в роли координат) в пространстве L1 (норма 1, расстояние в таксомоторной геометрии).

Синтаксис

L1Distance(vector1, vector2)

Псевдонимы: distanceL1

Аргументы

Возвращаемое значение

Возвращает расстояние в норме L1. UInt32 или Float64

Примеры

Базовое использование

SELECT L1Distance((1, 2), (2, 3))
┌─L1Distance((1, 2), (2, 3))─┐
│                          2 │
└────────────────────────────┘

L1Norm

Появилась в версии: v21.11

Вычисляет сумму модулей элементов вектора.

Синтаксис

L1Norm(vector)

Псевдонимы: normL1

Аргументы

  • vector — вектор или кортеж числовых значений. Array(T) или Tuple(T)

Возвращаемое значение

Возвращает L1-норму или расстояние в таксомоторной геометрии. UInt* или Float* или Decimal

Примеры

Базовое использование

SELECT L1Norm((1, 2))
┌─L1Norm((1, 2))─┐
│              3 │
└────────────────┘

L1Normalize

Введена в версии: v21.11

Вычисляет единичный вектор заданного вектора (элементы tuple являются координатами) в пространстве L1 (таксомоторная метрика).

Синтаксис

L1Normalize(tuple)

Псевдонимы: normalizeL1

Аргументы

  • tuple — кортеж числовых значений. Tuple(T)

Возвращаемое значение

Возвращает единичный вектор. Tuple(Float64)

Примеры

Базовое использование

SELECT L1Normalize((1, 2))
┌─L1Normalize((1, 2))─────────────────────┐
│ (0.3333333333333333,0.6666666666666666) │
└─────────────────────────────────────────┘

L2Distance

Добавлена в версии v21.11.

Вычисляет расстояние между двумя точками (элементы векторов — их координаты) в евклидовом пространстве (евклидово расстояние).

Синтаксис

L2Distance(vector1, vector2)

Псевдонимы: distanceL2

Аргументы

Возвращаемое значение

Возвращает расстояние в 2-й норме. Float64

Примеры

Базовое использование

SELECT L2Distance((1, 2), (2, 3))
┌─L2Distance((1, 2), (2, 3))─┐
│         1.4142135623730951 │
└────────────────────────────┘

L2DistanceTransposed

Добавлена в версии v25.10

Вычисляет приблизительное расстояние между двумя точками (значения векторов рассматриваются как координаты) в евклидовом пространстве (евклидово расстояние).

Синтаксис

L2DistanceTransposed(vector1, vector2, p)

Псевдонимы: distanceL2Transposed

Аргументы

  • vectors — Векторы. QBit(T, UInt64)
  • reference — Опорный вектор. Array(T)
  • p — Количество бит из каждого элемента вектора, используемых при вычислении расстояния (от 1 до разрядности элемента). Уровень квантования определяет компромисс между точностью и скоростью. Использование меньшего числа бит приводит к более быстрому вводy-выводу и вычислениям с пониженной точностью, тогда как использование большего числа бит повышает точность ценой производительности. UInt

Возвращаемое значение

Возвращает приближённое расстояние в 2-норме. Float64

Примеры

Базовое использование

CREATE TABLE qbit (id UInt32, vec QBit(Float64, 2)) ENGINE = Memory;
INSERT INTO qbit VALUES (1, [0, 1]);
SELECT L2DistanceTransposed(vec, array(1, 2), 16) FROM qbit;
┌─L2DistanceTransposed([0, 1], [1, 2], 16)─┐
│                       1.4142135623730951 │
└──────────────────────────────────────────┘

L2Norm

Впервые появилось в версии v21.11

Вычисляет квадратный корень из суммы квадратов элементов вектора.

Синтаксис

L2Norm(vector)

Псевдонимы: normL2

Аргументы

  • vector — вектор или кортеж числовых значений. Tuple(T) или Array(T)

Возвращаемое значение

Возвращает норму L2 или евклидово расстояние. UInt* или Float*

Примеры

Базовое использование

SELECT L2Norm((1, 2))
┌───L2Norm((1, 2))─┐
│ 2.23606797749979 │
└──────────────────┘

L2Normalize

Впервые представлена в: v21.11

Вычисляет единичный (нормированный) вектор, соответствующий заданному вектору (элементы кортежа являются координатами) в евклидовом пространстве (с использованием евклидова расстояния).

Синтаксис

L2Normalize(tuple)

Псевдонимы: normalizeL2

Аргументы

  • tuple — кортеж числовых значений. Tuple(T)

Возвращаемое значение

Возвращает единичный вектор. Tuple(Float64)

Примеры

Базовое использование

SELECT L2Normalize((3, 4))
┌─L2Normalize((3, 4))─┐
│ (0.6,0.8)           │
└─────────────────────┘

L2SquaredDistance

Введена в версии: v22.7

Вычисляет сумму квадратов разностей соответствующих элементов двух векторов.

Синтаксис

L2SquaredDistance(vector1, vector2)

Псевдонимы: distanceL2Squared

Аргументы

Возвращаемое значение

Возвращает сумму квадратов разностей между соответствующими элементами двух векторов. Float64

Примеры

Базовое использование

SELECT L2SquaredDistance([1, 2, 3], [0, 0, 0])
┌─L2SquaredDis⋯ [0, 0, 0])─┐
│                       14 │
└──────────────────────────┘

L2SquaredNorm

Введена в версии: v22.7

Вычисляет квадрат L2-нормы, то есть сумму квадратов элементов вектора (квадрат L2Norm).

Синтаксис

L2SquaredNorm(vector)

Псевдонимы: normL2Squared

Аргументы

  • vector — вектор или кортеж числовых значений. Array(T) или Tuple(T)

Возвращаемое значение

Возвращает квадрат L2-нормы. UInt* или Float* или Decimal

Примеры

Базовое использование

SELECT L2SquaredNorm((1, 2))
┌─L2SquaredNorm((1, 2))─┐
│                     5 │
└───────────────────────┘

LinfDistance

Добавлена в версии: v21.11

Вычисляет расстояние между двумя точками (координатами служат элементы векторов) в пространстве L_{inf} (максимальная норма).

Синтаксис

LinfDistance(vector1, vector2)

Псевдонимы: distanceLinf

Аргументы

Возвращаемое значение

Возвращает расстояние в норме L∞. Float64

Примеры

Базовое использование

SELECT LinfDistance((1, 2), (2, 3))
┌─LinfDistance((1, 2), (2, 3))─┐
│                            1 │
└──────────────────────────────┘

LinfNorm

Появилось в версии: v21.11

Вычисляет максимальное по модулю значение среди элементов вектора.

Синтаксис

LinfNorm(vector)

Псевдонимы: normLinf

Аргументы

  • vector — вектор или кортеж числовых значений. Array(T) или Tuple(T)

Возвращаемое значение

Возвращает норму Linf или максимальное по модулю значение. Float64

Примеры

Базовое использование

SELECT LinfNorm((1, -2))
┌─LinfNorm((1, -2))─┐
│                 2 │
└───────────────────┘

LinfNormalize

Добавлено в версии v21.11

Вычисляет единичный вектор для заданного вектора (элементы кортежа являются координатами) в пространстве L_{inf} (с использованием максимальной нормы).

Синтаксис

LinfNormalize(tuple)

Псевдонимы: normalizeLinf

Аргументы

  • tuple — кортеж числовых значений. Tuple(T)

Возвращаемое значение

Возвращает единичный вектор. Tuple(Float64)

Примеры

Базовое использование

SELECT LinfNormalize((3, 4))
┌─LinfNormalize((3, 4))─┐
│ (0.75,1)              │
└───────────────────────┘

LpDistance

Введена в версии v21.11

Вычисляет расстояние между двумя точками (элементы векторов являются их координатами) в пространстве Lp (расстояние в p-норме).

Синтаксис

LpDistance(vector1, vector2, p)

Псевдонимы: distanceLp

Аргументы

  • vector1 — первый вектор. Tuple(T) или Array(T)
  • vector2 — второй вектор. Tuple(T) или Array(T)
  • p — показатель степени. Возможные значения: действительное число из интервала [1; inf). UInt* или Float*

Возвращаемое значение

Возвращает расстояние в p-норме. Float64

Примеры

Базовое использование

SELECT LpDistance((1, 2), (2, 3), 3)
┌─LpDistance((1, 2), (2, 3), 3)─┐
│            1.2599210498948732 │
└───────────────────────────────┘

LpNorm

Впервые представлен в: v21.11

Вычисляет p-норму вектора, то есть p-й корень из суммы p-х степеней модулей его элементов.

Особые случаи:

  • При p=1 эквивалентно L1Norm (манхэттенское расстояние).
  • При p=2 эквивалентно L2Norm (евклидово расстояние).
  • При p=∞ эквивалентно LinfNorm (максимальная норма).

Синтаксис

LpNorm(vector, p)

Псевдонимы: normLp

Аргументы

  • vector — Вектор или кортеж числовых значений. Tuple(T) или массив Array(T)
  • p — Показатель степени. Возможные значения — действительные числа в диапазоне [1; inf). UInt* или Float*

Возвращаемое значение

Возвращает Lp-норму. Float64

Примеры

Базовое использование

SELECT LpNorm((1, -2), 2)
┌─LpNorm((1, -2), 2)─┐
│   2.23606797749979 │
└────────────────────┘

LpNormalize

Введено в версии: v21.11

Вычисляет единичный вектор заданного вектора (элементы кортежа являются координатами) в пространстве Lp (с использованием p-нормы).

Синтаксис

LpNormalize(tuple, p)

Псевдонимы: normalizeLp

Аргументы

  • tuple — кортеж числовых значений. Tuple(T)
  • p — степень. Возможные значения — любое число в диапазоне [1; inf). UInt* или Float*

Возвращаемое значение

Возвращает единичный вектор. Tuple(Float64)

Примеры

Пример использования

SELECT LpNormalize((3, 4), 5)
┌─LpNormalize((3, 4), 5)──────────────────┐
│ (0.7187302630182624,0.9583070173576831) │
└─────────────────────────────────────────┘

cosineDistance

Появилась в версии: v1.1

Вычисляет косинусное расстояние между двумя векторами (элементы кортежей являются их координатами). Чем меньше возвращаемое значение, тем более похожи друг на друга векторы.

Синтаксис

cosineDistance(vector1, vector2)

Аргументы

Возвращаемое значение

Возвращает значение, равное единице минус косинус угла между двумя векторами. Float64

Примеры

Базовое использование

SELECT cosineDistance((1, 2), (2, 3));
┌─cosineDistance((1, 2), (2, 3))─┐
│           0.007722123286332261 │
└────────────────────────────────┘

cosineDistanceTransposed

Введена в версии: v26.1

Вычисляет приближённое косинусное расстояние между двумя точками (значения векторов рассматриваются как координаты). Чем меньше возвращаемое значение, тем более похожи векторы.

Синтаксис

cosineDistanceTransposed(vector1, vector2, p)

Псевдонимы: distanceCosineTransposed

Аргументы

  • vectors — Векторы. QBit(T, UInt64)
  • reference — Опорный вектор. Array(T)
  • p — Количество бит из каждого элемента вектора, используемых при вычислении расстояния (от 1 до разрядности элемента). Уровень квантования задаёт компромисс между точностью и скоростью. Использование меньшего числа бит приводит к более быстрому вводу-выводу и вычислениям с пониженной точностью, а использование большего числа бит повышает точность за счёт производительности. UInt

Возвращаемое значение

Возвращает величину, равную единице минус приближённый косинус угла между двумя векторами. Float64

Примеры

Базовое использование

CREATE TABLE qbit (id UInt32, vec QBit(Float64, 2)) ENGINE = Memory;
INSERT INTO qbit VALUES (1, [0, 1]);
SELECT cosineDistanceTransposed(vec, array(1, 2), 16) FROM qbit;
┌─cosineDistanceTransposed([0, 1], [1, 2], 16)─┐
│                          0.10557281085638826 │
└──────────────────────────────────────────────┘