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

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

L1Distance

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

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

Синтаксис

L1Distance(vector1, vector2)

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

Аргументы

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

Возвращает расстояние в 1-норме. 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-норму или расстояние в метрике такси (taxicab geometry). UInt* или Float* или Decimal

Примеры

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

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

L1Normalize

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

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

Синтаксис

L1Normalize(tuple)

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

Аргументы

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

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

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

Примеры

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

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

L2Distance

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

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

Синтаксис

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 до разрядности элемента). Уровень квантизации определяет компромисс между точностью и скоростью. Использование меньшего количества бит приводит к более быстрым операциям ввода-вывода и вычислениям с пониженной точностью, тогда как использование большего количества бит повышает точность ценой производительности. 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

Вычисляет квадратный корень из суммы квадратов элементов вектора (то есть квадрат 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

Аргументы

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

Возвращает расстояние по норме бесконечности. 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} (c использованием максимальной нормы).

Синтаксис

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)

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

Аргументы

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

Возвращает единицу минус косинус угла между двумя векторами. 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

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

Возвращает величину 1 минус приближённый косинус угла между двумя векторами. 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 │
└──────────────────────────────────────────────┘