Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

距離関数

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

引数

  • vector — 数値からなるベクトルまたはタプル。Array(T) または Tuple(T)

戻り値

L1ノルム、または タクシー幾何学 における距離を返します。UInt* または Float* または Decimal

基本的な使い方

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

L1Normalize

導入バージョン: v21.11.0

指定されたベクトルの L1 空間 (タクシー幾何学) における単位ベクトルを計算します (タプルまたはArrayの各要素は座標です) 。

構文

L1Normalize(vector)

別名: normalizeL1

引数

  • vector — 数値から成るタプルまたはArray。Tuple(T) または Array(T)

戻り値

単位ベクトルを返します。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 と計算は高速になりますが精度は低下し、ビット数を多くすると精度は向上しますが、その分パフォーマンスは低下します。UInt
  • used_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])

引数

  • vectorsquantizeBFloat16ToInt8 コードのベクトル。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 ビット精度で再構築されます。UInt
  • used_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

引数

  • vector — 数値からなるベクトルまたはタプル。 Tuple(T) または Array(T)

戻り値

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

引数

  • vector — 数値からなるベクトルまたはタプル。 Array(T) または Tuple(T)

戻り値

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

引数

  • vector — 数値のベクトルまたはタプル。Array(T) または Tuple(T)

戻り値

Linf ノルム、つまり絶対値の最大値を返します。Float64

基本的な使い方

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

LinfNormalize

導入バージョン: v21.11.0

与えられたベクトルの単位ベクトル (タプルまたは配列の各要素が座標) を、L_{inf} 空間で計算します (最大ノルム を使用) 。

構文

LinfNormalize(vector)

別名: normalizeLinf

引数

  • vector — 数値のタプルまたは配列です。 Tuple(T) または Array(T)

戻り値

単位ベクトルを返します。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

引数

戻り値

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*

戻り値

Lp-ノルム を返します。Float64

基本的な使い方

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 と計算は高速になります。一方、ビット数を増やすと精度は向上しますが、パフォーマンスは低下します。UInt
  • used_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])

引数

  • vectorsquantizeBFloat16ToInt8 コードのベクトル。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 ビットのフル精度で再構成されます。UInt
  • used_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 と計算は高速になります。一方、ビット数を増やすと精度は向上しますが、パフォーマンスは低下します。UInt
  • used_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])

引数

  • vectorsquantizeBFloat16ToInt8 コードのベクトル。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 ビット精度で再構成されます。UInt
  • used_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 │
└──────────────────────────────────────────────────────────────────────────────┘
Navigation