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

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

L1Distance

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

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

Синтаксис

L1Distance(vector1, vector2)

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

Аргументы

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

Возвращает расстояние в 1-норме. Для входных данных Array возвращает Float32, если наименьший общий супертип типов элементов — Float32 или BFloat16, в противном случае — Float64. Для входных данных Tuple тип возвращаемого значения соответствует арифметическому типу результата поэлементных операций (целочисленные типы сохраняются). (U)Int* или Float*

Примеры

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

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

L1Norm

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

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

Синтаксис

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.0

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

Синтаксис

L1Normalize(tuple)

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

Аргументы

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

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

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

Примеры

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

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

L2Distance

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

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

Синтаксис

L2Distance(vector1, vector2)

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

Аргументы

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

Возвращает расстояние во 2-норме. Для входных данных Array возвращает Float32, если наименьший общий супертип типов элементов — Float32 или BFloat16, в противном случае — Float64. Для входных данных Tuple всегда возвращает Float64. Float*

Примеры

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

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

L2DistanceTransposed

Добавлено в: v25.10.0

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

Синтаксис

L2DistanceTransposed(vector1, vector2, p)

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

Аргументы

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

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

Возвращает приближённое расстояние по 2-норме. Всегда возвращает Float64. 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.0

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

Синтаксис

L2Norm(vector)

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

Аргументы

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

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

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

Примеры

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

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

L2Normalize

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

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

Синтаксис

L2Normalize(tuple)

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

Аргументы

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

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

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

Примеры

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

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

L2SquaredDistance

Добавлена в версии: v22.7.0

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

Синтаксис

L2SquaredDistance(vector1, vector2)

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

Аргументы

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

Возвращает сумму квадратов разностей соответствующих элементов двух векторов. Для входных данных Array возвращает Float32, если наименьший общий супертип типов элементов — Float32 или BFloat16, в противном случае — Float64. Для входных данных Tuple тип возвращаемого значения определяется арифметическим типом результата поэлементных операций (целочисленные типы сохраняются). (U)Int* или Float*

Примеры

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

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

L2SquaredNorm

Добавлено в: v22.7.0

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

Синтаксис

L2SquaredNorm(vector)

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

Аргументы

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

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

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

Примеры

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

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

LinfDistance

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

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

Синтаксис

LinfDistance(vector1, vector2)

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

Аргументы

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

Возвращает расстояние по норме бесконечности. Для входных данных Array возвращает Float32, если наименьший общий супертип типов элементов — Float32 или BFloat16, в противном случае — Float64. Для входных данных Tuple всегда возвращает Float64. Float*

Примеры

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

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

LinfNorm

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

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

Синтаксис

LinfNorm(vector)

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

Аргументы

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

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

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

Примеры

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

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

LinfNormalize

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

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

Синтаксис

LinfNormalize(tuple)

Синонимы: normalizeLinf

Аргументы

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

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

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

Примеры

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

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

LpDistance

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

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

Синтаксис

LpDistance(vector1, vector2, p)

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

Аргументы

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

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

Возвращает расстояние в p-норме. Для входных данных типа Array возвращает Float32, если наименьший общий супертип типов элементов — Float32 или BFloat16, в противном случае — Float64. Для входных данных типа Tuple всегда возвращает Float64. Float*

Примеры

Базовый пример

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

LpNorm

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

Вычисляет 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.0

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

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

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

Синтаксис

cosineDistance(vector1, vector2)

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

Аргументы

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

Возвращает косинусное расстояние (единица минус косинусное сходство). Для входных данных типа Array возвращает Float32, если наименьший общий супертип типов элементов — Float32 или BFloat16, в противном случае — Float64. Для входных данных типа Tuple всегда возвращает Float64. Float*

Примеры

Базовый пример

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

cosineDistanceTransposed

Добавлена в: v26.1.0

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

Синтаксис

cosineDistanceTransposed(vector1, vector2, p)

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

Аргументы

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

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

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