L1Distance
導入バージョン: v21.11.0
L1 空間における 2 点間の距離 (ベクトルの各要素が座標) を計算します (1-ノルム、タクシー幾何学距離) 。
構文
L1Distance(vector1, vector2)別名: distanceL1
引数
戻り値
1-ノルム距離を返します。Array 入力の場合、要素型の最小の共通スーパータイプが Float32 または BFloat16 であれば Float32、それ以外の場合は 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 空間 (タクシー幾何学) における単位ベクトルを計算します (タプルまたはArrayの各要素は座標です) 。
構文
L1Normalize(vector)別名: normalizeL1
引数
戻り値
単位ベクトルを返します。Array 入力の場合、要素型の最小共通スーパータイプが Float32 または BFloat16 であれば Array(Float32) を返し、それ以外の場合は 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
ユークリッド空間における 2 点間の距離 (ベクトルの各要素が座標) を計算します (ユークリッド距離) 。
構文
L2Distance(vector1, vector2)別名: distanceL2
引数
戻り値
2-ノルム距離を返します。入力が Array の場合、要素型の最小の共通スーパータイプが Float32 または BFloat16 であれば Float32 を返し、それ以外の場合は Float64 を返します。入力が Tuple の場合は、常に Float64 を返します。Float*
例
基本的な使い方
SELECT L2Distance((1, 2), (2, 3))┌─L2Distance((1, 2), (2, 3))─┐
│ 1.4142135623730951 │
└────────────────────────────┘L2DistanceTransposed
導入バージョン: v25.10.0
ユークリッド空間における 2 点間の近似距離 (ベクトルの各値を座標とする) を計算します (ユークリッド距離) 。
構文
L2DistanceTransposed(vector1, vector2, p[, used_dims])別名: distanceL2Transposed
引数
vectors— ベクトル。QBit(T, UInt64[, UInt64])reference— 参照ベクトル。Array(T)p— 距離計算で各ベクトル要素から使用するビット数 (1 から要素のビット幅まで) 。量子化レベルによって、精度と速度のトレードオフが決まります。ビット数を少なくすると I/O と計算は高速になりますが精度は低下し、ビット数を多くすると精度は向上しますが、その分パフォーマンスは低下します。UIntused_dims— 任意。ストライド付きQBitに対して低次元 (Matryoshka) 検索を行うために読み取る先頭の次元数です。QBit の stride の倍数であり、その次元数を超えてはなりません。また、参照ベクトルは少なくともこの数だけの要素を持っている必要があります (末尾の余分な要素は無視されます) 。これらの次元をカバーする 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
quantizeBFloat16ToInt8 のコードを持つ QBit(Int8) (オンザフライで逆量子化) と参照ベクトルの間の近似 ユークリッド距離 を計算します。Float の参照 (クエリ) ベクトルは、逆量子化されたコードの再構成精度である Float32 精度で直接比較されるため、Float64 のクエリは Float32 に縮小され、BFloat16 のクエリは正確に Float32 に拡張されます (非対称距離計算)。Array(Int8) の参照は、それ自体が quantizeBFloat16ToInt8 のコードとして扱われ、その再構成レベルに逆量子化されます。p が切り詰めるのは保存された QBit コードだけである点に注意してください。Array(Int8) の参照は完全なクエリであり、常に完全な 8 ビット精度で再構成されるため、これは p = 8 のときにのみ対称な量子化同士の距離になります (p < 8 では、保存側だけがより粗い精度で読み取られます)。これは、量子化前の値が属していたのと同じ空間、つまり同じランダム回転とスケーリングを適用した後の空間になければならず、これを担保するのは呼び出し元の責任です。cosine distance はスケール不変ですが、内積と L2 距離 はそうではありません。
構文
L2DistanceTransposedQuantized(vectors, reference, p[, used_dims])引数
vectors—quantizeBFloat16ToInt8コードのベクトル。QBit(Int8, UInt64[, UInt64])reference— 参照 (クエリ) ベクトル:Float配列 (クエリ。Float32精度で比較されます。Float64のクエリはFloat32に変換されます)、またはquantizeBFloat16ToInt8コードのArray(Int8)で、オンザフライで逆量子化されます。Array(Float32)またはArray(Int8)p— 使用する、格納済みQBitコードの上位ビット数 (1 から 8) 。ビット数が少ないほど、既存の Lloyd-Max プレフィックスインターバルのガウス条件付き平均セントロイドを使用して、より粗い埋め込み量子化器が再構築され、I/O は高速になりますが精度は低下します。8 ビットはフル精度の再構築です。pは格納済みQBitのみを切り詰めます。Array(Int8)の参照は常に完全な 8 ビット精度で再構築されます。UIntused_dims— 任意。ストライド付きQBitに対して低次元 (Matryoshka) 検索を行うために読み取る先頭の次元数です。QBit の stride の倍数であり、その次元数を超えてはなりません。また、参照ベクトルは少なくともこの数の要素を持っている必要があります (末尾の余分な要素は無視されます)。これらの次元をカバーする 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
ユークリッド空間において、指定されたベクトル (タプル または Array の要素が座標) の単位ベクトルを計算します (ユークリッド距離を使用) 。
構文
L2Normalize(vector)別名: normalizeL2
引数
戻り値
単位ベクトルを返します。Array を入力した場合、要素型の最小共通スーパータイプが Float32 または BFloat16 であれば Array(Float32) を、それ以外の場合は 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
2 つのベクトルの対応する要素間の差の二乗和を計算します。
構文
L2SquaredDistance(vector1, vector2)別名: distanceL2Squared
引数
戻り値
2つのベクトルの対応する要素の差の二乗和を返します。Array 入力の場合、要素型の最小共通スーパータイプが Float32 または BFloat16 なら Float32、それ以外は 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} 空間における 2 点間の距離を計算します (ベクトルの要素が座標を表します) (最大ノルム) 。
構文
LinfDistance(vector1, vector2)別名: distanceLinf
引数
戻り値
無限大ノルム距離を返します。入力が Array の場合、要素型の最小共通スーパータイプが Float32 または BFloat16 であれば Float32、それ以外は 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 入力の場合、要素型の最小共通スーパータイプが Float32 または BFloat16 であれば Array(Float32) を返し、それ以外の場合は 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 空間における 2 点間の距離 (ベクトルの要素を座標とする) を計算します (p-ノルム距離) 。
構文
LpDistance(vector1, vector2, p)別名: distanceLp
引数
vector1— 1つ目のベクトル。Tuple(T)またはArray(T)vector2— 2つ目のベクトル。Tuple(T)またはArray(T)p— 指数。設定可能な値:[1; inf)の実数。UInt*またはInt*またはFloat*
戻り値
p-ノルム距離を返します。Array 入力の場合、要素型の最小共通スーパータイプが Float32 または BFloat16 であれば Float32、それ以外の場合は 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の値は 1 以上の有限数である必要があります。最大ノルム (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
p-ノルムを用いて、Lp 空間における指定したベクトルの単位ベクトルを計算します (タプルまたは配列の要素が座標に相当します) 。
構文
LpNormalize(vector, p)別名: normalizeLp
引数
vector— 数値からなるタプルまたは配列。Tuple(T)またはArray(T)p— 指数。設定可能な値は、範囲[1; inf)の実数です。UInt*またはInt*またはFloat*
戻り値
単位ベクトルを返します。Array を入力した場合、要素型の最小共通スーパータイプが Float32 または BFloat16 であれば Array(Float32) を返し、それ以外の場合は 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
2 つのベクトル間の コサイン距離 を計算します (タプルの要素は座標です) 。戻り値が小さいほど、2 つのベクトルはより類似しています。
構文
cosineDistance(vector1, vector2)別名: distanceCosine
引数
戻り値
コサイン距離 (コサイン類似度から 1 を引いた値) を返します。Array を入力した場合、要素型の最小共通スーパータイプが Float32 または BFloat16 であれば Float32、それ以外の場合は Float64 を返します。Tuple を入力した場合は、常に Float64 を返します。Float*
例
基本的な使い方
SELECT cosineDistance((1, 2), (2, 3));┌─cosineDistance((1, 2), (2, 3))─┐
│ 0.007722123286332261 │
└────────────────────────────────┘cosineDistanceTransposed
導入バージョン: v26.1.0
2 点間の近似的な コサイン距離 を計算します (ベクトルの値を座標とみなします) 。戻り値が小さいほど、ベクトルはより類似しています。
構文
cosineDistanceTransposed(vector1, vector2, p[, used_dims])別名: distanceCosineTransposed
引数
vectors— ベクトル。QBit(T, UInt64[, UInt64])reference— 参照ベクトル。Array(T)p— 距離計算で各ベクトル要素から使用するビット数 (1 から要素のビット幅まで) 。量子化レベルによって、精度と速度のトレードオフが決まります。使用するビット数を減らすと、精度は低下しますが、I/O と計算は高速になります。一方、ビット数を増やすと精度は向上しますが、パフォーマンスは低下します。UIntused_dims— 省略可能。ストライド付きQBitで低次元 (Matryoshka) 検索を行うために、先頭から読み取る次元数です。QBit の stride の倍数であり、その次元数を超えてはなりません。また、参照ベクトルには少なくともこの数の要素が必要です (末尾の余分な要素は無視されます) 。これらの次元をカバーする stride グループのみが読み取られます。UInt
戻り値
近似コサイン距離 (コサイン類似度を 1 から引いた値) を返します。返り値は常に 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
quantizeBFloat16ToInt8 コードの QBit(Int8) (オンザフライで逆量子化) と参照ベクトルの間の近似的な コサイン距離 を計算します。戻り値が小さいほど、ベクトル同士の類似度は高くなります。Float の参照 (クエリ) ベクトルは、逆量子化されたコードの再構成精度である Float32 精度で直接比較されます。つまり、Float64 クエリは Float32 に変換され、BFloat16 クエリは正確に Float32 へ拡張されます (非対称な距離計算) 。一方、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に変換されます) 、またはオンザフライで逆量子化されるquantizeBFloat16ToInt8コードのArray(Int8)。Array(Float32)またはArray(Int8)p— 各保存済みQBitコードで使用する上位ビット数 (1 ~ 8) 。ビット数が少ないほど、既存の Lloyd-Max プレフィックスインターバルのガウス条件付き平均セントロイドを使用して、より粗い埋め込み量子化器が再構成されるため、精度は下がりますが I/O は高速になります。8 ビットはフル精度での再構成です。pで切り詰められるのは保存済みQBitのみで、Array(Int8)の参照は常に 8 ビットのフル精度で再構成されます。UIntused_dims— 任意。ストライド付きQBitに対する 低次元 (Matryoshka) 検索で読み取る先頭の次元数です。QBit の stride の倍数であり、その次元 を超えてはならず、参照ベクトルは少なくともこの数の要素を持っている必要があります (余分な末尾の要素は無視されます) 。これらの次元を含む stride グループ のみが読み取られます。UInt
戻り値
近似 コサイン距離 (コサイン類似度 から 1 を引いた値) を返します。戻り値は常に 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
2 つのベクトルの近似的な 内積 (インナー積) を計算します (ベクトルの値を座標とみなします) 。距離関数とは異なり、これは類似度の指標です。戻り値が大きいほど、ベクトルはより類似しています。
構文
dotProductTransposed(vector1, vector2, p[, used_dims])別名: scalarProductTransposed
引数
vectors— ベクトル。QBit(T, UInt64[, UInt64])reference— 参照ベクトル。Array(T)p— 計算で各ベクトル要素から使用するビット数 (1 から要素のビット幅まで) 。量子化レベルによって、精度と速度のトレードオフが決まります。使用するビット数を減らすと、精度は低下しますが、I/O と計算は高速になります。一方、ビット数を増やすと精度は向上しますが、パフォーマンスは低下します。UIntused_dims— 省略可能。ストライド付きQBitに対する低次元 (Matryoshka) 検索のために、読み取る先頭の次元数です。QBit の stride の倍数であり、その次元数を超えてはなりません。また、参照ベクトルは少なくともこの数の要素を持っている必要があります (余分な末尾要素は無視されます) 。これらの次元をカバーする stride グループのみが読み取られます。UInt
戻り値
2 つのベクトルの近似内積を返します。返り値は常に 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
quantizeBFloat16ToInt8 のコードを持つ QBit(Int8) と参照ベクトルの間の近似的な 内積 (インナー積) を計算します (QBit(Int8) は オンザフライで逆量子化されます) 。これは類似度の指標です。戻り値が大きいほど、ベクトルはより類似しています。Float の参照 (クエリ) ベクトルは、逆量子化されたコードの再構成精度である Float32 精度で直接比較されるため、Float64 クエリは Float32 に変換され、BFloat16 クエリは正確に Float32 に拡張されます (非対称距離計算) 。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に変換されます) 、またはquantizeBFloat16ToInt8コードのArray(Int8)で、オンザフライで逆量子化されます。Array(Float32)またはArray(Int8)p— 使用する、保存済みの各QBitコードの上位ビット数 (1 から 8) 。ビット数を減らすと、既存の Lloyd-Max プレフィックスインターバルのガウス条件付き平均セントロイドを使用して、より粗い埋め込み量子化器が再構成され、精度は低下しますが I/O は高速になります。8 ビットはフル精度の再構成です。pが切り詰めるのは保存済みのQBitのみであり、Array(Int8)の参照は常に完全な 8 ビット精度で再構成されます。UIntused_dims— 任意。ストライド付きQBitに対する低次元 (Matryoshka) 検索のために、読み取る先頭の次元数です。QBit の stride の倍数であり、その次元数を超えてはなりません。また、参照ベクトルは少なくともこの数の要素を持っている必要があります (末尾に余分な要素がある場合は無視されます) 。これらの次元をカバーする 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 dotProductTransposedQuantized(vec, [0.1, -0.5]::Array(Float32), 8) FROM qbit;┌─dotProductTransposedQuantized(vec, CAST('[0.1, -0.5]', 'Array(Float32)'), 8)─┐
│ 0.25834959745407104 │
└──────────────────────────────────────────────────────────────────────────────┘