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
Аргументы
Возвращаемое значение
Возвращает L1-норму или расстояние в таксомоторной геометрии. UInt* или Float* или Decimal
Примеры
Базовое использование
SELECT L1Norm((1, 2))┌─L1Norm((1, 2))─┐
│ 3 │
└────────────────┘L1Normalize
Добавленный в: v21.11.0
Вычисляет единичный вектор заданного вектора (элементы кортежа или массива — координаты) в пространстве L1 (таксомоторная геометрия).
Синтаксис
L1Normalize(vector)Псевдонимы: normalizeL1
Аргументы
Возвращаемое значение
Возвращает единичный вектор. Для входных данных типа Array возвращает Array(Float32), если наименьший общий супертип типов элементов — Float32 или BFloat16; в противном случае — Array(Float64). Для входных данных типа Tuple всегда возвращает Tuple(Float64). Tuple(Float64) или Array(Float32) или Array(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[, used_dims])Псевдонимы: distanceL2Transposed
Аргументы
vectors— Векторы.QBit(T, UInt64[, UInt64])reference— Опорный вектор.Array(T)p— Количество битов из каждого элемента вектора, используемых при вычислении расстояния (от 1 до битовой ширины элемента). Уровень квантования определяет компромисс между точностью и скоростью. Использование меньшего количества битов ускоряет операции ввода-вывода и вычисления, но снижает точность, тогда как большее количество битов повышает точность ценой производительности.UIntused_dims— Необязательно. Количество первых размерностей, которые нужно считывать, для поиска с уменьшенной размерностью вQBitсо stride. Должно быть кратно stride в QBit и не превышать его размерность, а опорный вектор должен содержать как минимум столько элементов (любые дополнительные конечные элементы игнорируются). Считываются только те группы stride, которые покрывают эти размерности.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(vec, [1, 2], 16)─┐
│ 1.3922918381215914 │
└───────────────────────────────────────┘L2DistanceTransposedQuantized
Добавленный в: v26.7.0
Вычисляет приблизительное евклидово расстояние между QBit(Int8) из кодов quantizeBFloat16ToInt8 (деквантованных на лету) и опорным вектором. Опорный вектор (запрос) типа Float сравнивается напрямую с точностью Float32 — точностью восстановления деквантованных кодов, поэтому запрос Float64 сужается до Float32, а запрос BFloat16 точно расширяется до него (асимметричное вычисление расстояния); опорный вектор Array(Int8) сам рассматривается как коды quantizeBFloat16ToInt8 и деквантуется до своих уровней восстановления. Обратите внимание, что p усекает только сохранённые коды QBit; опорный Array(Int8) сам является полным запросом и всегда восстанавливается с полной 8-битной точностью, поэтому это симметричное расстояние между квантованными векторами только при p = 8 (при p < 8 только сохранённая сторона считывается с более грубой точностью). Он должен находиться в том же пространстве, в котором значения были до квантования (то есть после того же случайного поворота и масштабирования), и ответственность за это лежит на вызывающей стороне. Косинусное расстояние инвариантно к масштабу; скалярное произведение и расстояние L2 — нет.
Синтаксис
L2DistanceTransposedQuantized(vectors, reference, p[, used_dims])Аргументы
vectors— Векторы кодовquantizeBFloat16ToInt8.QBit(Int8, UInt64[, UInt64])reference— Опорный вектор (запрос): массивFloat(запрос сравнивается с точностьюFloat32— запросFloat64приводится кFloat32) илиArray(Int8)из кодовquantizeBFloat16ToInt8, деквантованных на лету.Array(Float32)илиArray(Int8)p— Количество старших битов каждого сохранённого кодаQBit, которые следует использовать (от 1 до 8). Меньшее количество битов восстанавливает более грубый встроенный квантизатор, использующий центроиды гауссовских условных средних для существующих префиксных интервалов Ллойда — Макса, обеспечивая более быстрый ввод-вывод ценой снижения точности; 8 бит — это восстановление с полной точностью.pусекает только сохранённыйQBit; опорныйArray(Int8)всегда восстанавливается с полной 8-битной точностью.UIntused_dims— Необязательно. Количество первых размерностей, которые нужно считывать, для поиска с уменьшенной размерностью (Matryoshka) вQBitсо stride. Должно быть кратно stride в QBit и не превышать его размерность, а опорный вектор должен содержать как минимум столько элементов (любые дополнительные конечные элементы игнорируются). Считываются только те группы stride, которые покрывают эти размерности.UInt
Возвращаемое значение
Возвращает приблизительное расстояние по 2-норме. Всегда возвращает Float64. Float64
Примеры
Базовое использование
CREATE TABLE qbit (id UInt32, vec QBit(Int8, 2)) ENGINE = Memory;
INSERT INTO qbit VALUES (1, arrayMap(x -> quantizeBFloat16ToInt8(x), [0.1, -0.5]::Array(BFloat16)));
SELECT L2DistanceTransposedQuantized(vec, [0.1, -0.5]::Array(Float32), 8) FROM qbit;┌─L2DistanceTransposedQuantized(vec, CAST('[0.1, -0.5]', 'Array(Float32)'), 8)─┐
│ 0.004942022755037076 │
└──────────────────────────────────────────────────────────────────────────────┘L2Norm
Добавленный в: v21.11.0
Вычисляет квадратный корень из суммы квадратов элементов вектора.
Синтаксис
L2Norm(vector)Псевдонимы: normL2
Аргументы
Возвращаемое значение
Возвращает норму L2 или евклидово расстояние. UInt* или Float*
Примеры
Базовое использование
SELECT L2Norm((1, 2))┌───L2Norm((1, 2))─┐
│ 2.23606797749979 │
└──────────────────┘L2Normalize
Добавлена в: v21.11.0
Вычисляет единичный вектор для заданного вектора (элементы кортежа или массива являются координатами) в евклидовом пространстве (с использованием евклидова расстояния).
Синтаксис
L2Normalize(vector)Псевдонимы: normalizeL2
Аргументы
Возвращаемое значение
Возвращает единичный вектор. Для входных данных Array возвращает Array(Float32), если наименьший общий супертип типов элементов — Float32 или BFloat16; в противном случае — Array(Float64). Для входных данных Tuple всегда возвращает Tuple(Float64). Tuple(Float64) или Array(Float32) или Array(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])┌─L2SquaredDistance([1, 2, 3], [0, 0, 0])─┐
│ 14 │
└─────────────────────────────────────────┘L2SquaredNorm
Добавленный в: v22.7.0
Вычисляет квадрат нормы L2Norm, то есть сумму квадратов элементов вектора.
Синтаксис
L2SquaredNorm(vector)Псевдонимы: normL2Squared
Аргументы
Возвращаемое значение
Возвращает квадрат нормы 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
Аргументы
Возвращаемое значение
Возвращает норму Linf, то есть максимальное по модулю значение. Float64
Примеры
Базовое использование
SELECT LinfNorm((1, -2))┌─LinfNorm((1, -2))─┐
│ 2 │
└───────────────────┘LinfNormalize
Добавленный в: v21.11.0
Вычисляет единичный вектор для заданного вектора (элементы кортежа или массива служат координатами) в пространстве L_{inf} (с использованием максимальной нормы).
Синтаксис
LinfNormalize(vector)Псевдонимы: normalizeLinf
Аргументы
Возвращаемое значение
Возвращает единичный вектор. Для входных данных Array возвращает Array(Float32), если наименьший общий супертип типов элементов — Float32 или BFloat16; в противном случае возвращает Array(Float64). Для входных данных Tuple всегда возвращает Tuple(Float64). Tuple(Float64) или Array(Float32) или Array(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*илиInt*или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должно быть конечным числом не меньше единицы; для максимальной нормы (предел при p→∞) используйтеLinfNorm.
Синтаксис
LpNorm(vector, p)Псевдонимы: normLp
Аргументы
vector— Вектор или кортеж числовых значений.Tuple(T)илиArray(T)p— Степень. Возможные значения — действительные числа в диапазоне[1; inf).UInt*илиInt*илиFloat*
Возвращаемое значение
Примеры
Базовое использование
SELECT LpNorm((1, -2), 2)┌─LpNorm((1, -2), 2)─┐
│ 2.23606797749979 │
└────────────────────┘LpNormalize
Добавлена в версии: v21.11.0
Вычисляет единичный вектор заданного вектора (элементы кортежа или массива являются координатами) в пространстве Lp (с использованием p-нормы).
Синтаксис
LpNormalize(vector, p)Псевдонимы: normalizeLp
Аргументы
vector— кортеж или массив числовых значений.Tuple(T)илиArray(T)p— степень. Допустимые значения: действительные числа в диапазоне[1; inf).UInt*илиInt*илиFloat*
Возвращаемое значение
Возвращает единичный вектор. Для входных значений типа Array возвращает Array(Float32), если наименьший общий супертип типов элементов — Float32 или BFloat16; в противном случае — Array(Float64). Для входных значений типа Tuple всегда возвращает Tuple(Float64). Tuple(Float64) или Array(Float32) или Array(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[, used_dims])Псевдонимы: distanceCosineTransposed
Аргументы
vectors— Векторы.QBit(T, UInt64[, UInt64])reference— Опорный вектор.Array(T)p— Количество битов из каждого элемента вектора, используемых при вычислении расстояния (от 1 до разрядности элемента в битах). Уровень квантования определяет компромисс между точностью и скоростью. Использование меньшего количества битов ускоряет операции ввода-вывода и вычисления, но снижает точность, тогда как большее количество битов повышает точность ценой производительности.UIntused_dims— Необязательно. Количество начальных размерностей для чтения при поиске с уменьшенной размерностью (Matryoshka) поQBitсо stride. Должно быть кратно strideQBitи не превышать его размерность, а опорный вектор должен содержать как минимум столько элементов (любые дополнительные конечные элементы игнорируются). Считываются только группы stride, покрывающие эти размерности.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(vec, [1, 2], 16)─┐
│ 0.10557280905788935 │
└───────────────────────────────────────────┘cosineDistanceTransposedQuantized
Добавленный в: v26.7.0
Вычисляет приблизительное косинусное расстояние между кодами QBit(Int8) функции quantizeBFloat16ToInt8 (деквантуемыми на лету) и опорным вектором. Чем меньше возвращаемое значение, тем больше сходство между векторами. Опорный вектор Float (вектор запроса) сравнивается напрямую с точностью Float32 — то есть с точностью восстановления деквантованных кодов, поэтому Float64-запрос приводится к Float32, а BFloat16-запрос точно расширяется до него (асимметричное вычисление расстояния); опорный Array(Int8) сам рассматривается как коды quantizeBFloat16ToInt8 и деквантуется до своих уровней восстановления. Обратите внимание: p усекает только сохранённые коды QBit; опорный Array(Int8) сам по себе является полным запросом и всегда восстанавливается с полной 8-битной точностью, поэтому симметричное расстояние между квантованными векторами здесь получается только при p = 8 (при p < 8 только сохранённая сторона читается с более грубой точностью). Он должен находиться в том же пространстве, в котором значения находились до квантования (то есть после того же случайного поворота и масштабирования); это ответственность вызывающей стороны. Косинусное расстояние инвариантно к масштабу; скалярное произведение и L2-расстояние — нет.
Синтаксис
cosineDistanceTransposedQuantized(vectors, reference, p[, used_dims])Аргументы
vectors— Векторы кодовquantizeBFloat16ToInt8.QBit(Int8, UInt64[, UInt64])reference— Опорный вектор (запрос): массивFloat(запрос сравнивается с точностьюFloat32— запросFloat64приводится кFloat32) илиArray(Int8)с кодамиquantizeBFloat16ToInt8, деквантуемыми на лету.Array(Float32)илиArray(Int8)p— Число старших битов каждого хранимого кодаQBit, которое нужно использовать (от 1 до 8). Чем меньше битов, тем грубее восстанавливаемый встроенный квантизатор, использующий центроиды условных средних гауссовского распределения для существующих префиксных интервалов Ллойда — Макса, но тем быстрее ввод-вывод и ниже точность; 8 бит — это восстановление с полной точностью.pусекает только хранимыйQBit; опорный векторArray(Int8)всегда восстанавливается с полной 8-битной точностью.UIntused_dims— Необязательно. Количество начальных размерностей, которые нужно считывать для поиска с уменьшенной размерностью (Matryoshka) по QBit со stride. Должно быть кратно strideQBitи не превышать его размерность, а опорный вектор должен содержать как минимум столько элементов (любые дополнительные конечные элементы игнорируются). Считываются только группы stride, покрывающие эти размерности.UInt
Возвращаемое значение
Возвращает приближённое косинусное расстояние (единица минус косинусное сходство). Всегда возвращает Float64. Float64
Примеры
Базовое использование
CREATE TABLE qbit (id UInt32, vec QBit(Int8, 2)) ENGINE = Memory;
INSERT INTO qbit VALUES (1, arrayMap(x -> quantizeBFloat16ToInt8(x), [0.1, -0.5]::Array(BFloat16)));
SELECT cosineDistanceTransposedQuantized(vec, [0.1, -0.5]::Array(Float32), 8) FROM qbit;┌─cosineDistanceTransposedQuantized(vec, CAST('[0.1, -0.5]', 'Array(Float32)'), 8)─┐
│ 0.000027192636379513857 │
└──────────────────────────────────────────────────────────────────────────────────┘dotProductTransposed
Добавленный в: v26.7.0
Вычисляет приблизительное скалярное произведение (внутреннее произведение) двух векторов (значения векторов служат координатами). В отличие от функций расстояния, это мера сходства: чем больше возвращаемое значение, тем более похожи векторы.
Синтаксис
dotProductTransposed(vector1, vector2, p[, used_dims])Псевдонимы: scalarProductTransposed
Аргументы
vectors— Векторы.QBit(T, UInt64[, UInt64])reference— Опорный вектор.Array(T)p— Количество битов из каждого элемента вектора, используемых при вычислении (от 1 до разрядности элемента в битах). Уровень квантования определяет компромисс между точностью и скоростью. Использование меньшего количества битов ускоряет операции ввода-вывода и вычисления, но снижает точность, тогда как большее количество битов повышает точность ценой производительности.UIntused_dims— Необязательно. Количество начальных размерностей, которые нужно считывать, для поиска с уменьшенной размерностью (Matryoshka) поQBitсо stride. Должно быть кратно stride QBit и не превышать его размерность, а опорный вектор должен содержать как минимум столько элементов (любые дополнительные элементы в конце игнорируются). Считываются только группы stride, покрывающие эти размерности.UInt
Возвращаемое значение
Возвращает приблизительное скалярное произведение двух векторов. Всегда возвращает Float64. Float64
Примеры
Базовое использование
CREATE TABLE qbit (id UInt32, vec QBit(Float64, 2)) ENGINE = Memory;
INSERT INTO qbit VALUES (1, [0, 1]);
SELECT dotProductTransposed(vec, array(1, 2), 16) FROM qbit;┌─dotProductTransposed(vec, [1, 2], 16)─┐
│ 2.0625 │
└───────────────────────────────────────┘dotProductTransposedQuantized
Добавленный в: v26.7.0
Вычисляет приблизительное скалярное произведение (внутреннее произведение) между QBit(Int8), содержащим коды quantizeBFloat16ToInt8 (деквантуемые на лету), и опорным вектором. Это мера сходства: чем больше возвращаемое значение, тем более похожи векторы. Опорный вектор (запрос) типа Float сравнивается напрямую с точностью Float32 — точностью восстановления деквантованных кодов, поэтому запрос Float64 приводится к Float32, а запрос BFloat16 точно расширяется до этого типа (асимметричное вычисление расстояния); опорный вектор Array(Int8) сам рассматривается как коды quantizeBFloat16ToInt8 и деквантуется до уровней их восстановления. Обратите внимание, что p усекает только сохранённые коды QBit; опорный вектор Array(Int8) сам по себе является полным запросом и всегда восстанавливается с полной 8-битной точностью, поэтому симметричное расстояние между квантованными векторами получается только при p = 8 (при p < 8 только сохранённая сторона считывается с более грубой точностью). Он должен находиться в том же пространстве, в котором значения были до квантования (то есть после того же случайного поворота и масштабирования), и это ответственность вызывающей стороны. Косинусное расстояние инвариантно к масштабу; скалярное произведение и L2-расстояние — нет.
Синтаксис
dotProductTransposedQuantized(vectors, reference, p[, used_dims])Аргументы
vectors— Векторы кодовquantizeBFloat16ToInt8.QBit(Int8, UInt64[, UInt64])reference— Опорный вектор (запрос): массивFloat(запрос сравнивается с точностьюFloat32— запрос типаFloat64приводится кFloat32) илиArray(Int8)из кодовquantizeBFloat16ToInt8, деквантуемых на лету.Array(Float32)илиArray(Int8)p— Количество старших битов каждого сохранённого кодаQBit, используемых при вычислении (от 1 до 8). Меньшее количество битов даёт более грубое восстановление встроенного квантизатора с использованием центроидов, соответствующих условным средним гауссовского распределения в существующих префиксных интервалах Ллойда — Макса, что ускоряет ввод-вывод ценой снижения точности; 8 бит — это восстановление с полной точностью.pусекает только сохранённыйQBit; опорныйArray(Int8)всегда восстанавливается с полной 8-битной точностью.UIntused_dims— Необязательно. Количество начальных размерностей, которые нужно считывать, для поиска с уменьшенной размерностью (Matryoshka) поQBitсо stride. Должно быть кратно stride QBit и не превышать его размерность, а опорный вектор должен содержать как минимум столько элементов (все дополнительные элементы в конце игнорируются). Считываются только группы stride, покрывающие эти размерности.UInt
Возвращаемое значение
Возвращает приблизительное скалярное произведение двух векторов. Всегда возвращает Float64. Float64
Примеры
Базовое использование
CREATE TABLE qbit (id UInt32, vec QBit(Int8, 2)) ENGINE = Memory;
INSERT INTO qbit VALUES (1, arrayMap(x -> quantizeBFloat16ToInt8(x), [0.1, -0.5]::Array(BFloat16)));
SELECT dotProductTransposedQuantized(vec, [0.1, -0.5]::Array(Float32), 8) FROM qbit;┌─dotProductTransposedQuantized(vec, CAST('[0.1, -0.5]', 'Array(Float32)'), 8)─┐
│ 0.25834959745407104 │
└──────────────────────────────────────────────────────────────────────────────┘