> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> 距離関数に関するドキュメント

# 距離関数

{/*AUTOGENERATED_START*/}

<div id="L1Distance">
  ## L1Distance
</div>

導入バージョン: v21.11.0

`L1` 空間における 2 点間の距離 (ベクトルの各要素が座標) を計算します (1-ノルム、[タクシー幾何学](https://en.wikipedia.org/wiki/Taxicab_geometry)距離) 。

**構文**

```sql theme={null}
L1Distance(vector1, vector2)
```

**別名**: `distanceL1`

**引数**

* `vector1` — 第1ベクトル。[`Tuple(T)`](/docs/ja/reference/data-types/tuple) または [`Array(T)`](/docs/ja/reference/data-types/array)
* `vector2` — 第2ベクトル。[`Tuple(T)`](/docs/ja/reference/data-types/tuple) または [`Array(T)`](/docs/ja/reference/data-types/array)

**戻り値**

1-ノルム距離を返します。`Array` 入力の場合、要素型の最小の共通スーパータイプが `Float32` または `BFloat16` であれば `Float32`、それ以外の場合は `Float64` を返します。`Tuple` 入力の場合、戻り値の型は要素ごとの演算の算術結果型に従います (整数型は保持されます) 。[`(U)Int*`](/docs/ja/reference/data-types/int-uint) または [`Float*`](/docs/ja/reference/data-types/float)

**例**

**基本的な使い方**

```sql title=Query theme={null}
SELECT L1Distance((1, 2), (2, 3))
```

```response title=Response theme={null}
┌─L1Distance((1, 2), (2, 3))─┐
│                          2 │
└────────────────────────────┘
```

<div id="L1Norm">
  ## L1Norm
</div>

導入バージョン: v21.11.0

ベクトル要素の絶対値の総和を計算します。

**構文**

```sql theme={null}
L1Norm(vector)
```

**別名**: `normL1`

**引数**

* `vector` — 数値からなるベクトルまたはタプル。[`Array(T)`](/docs/ja/reference/data-types/array) または [`Tuple(T)`](/docs/ja/reference/data-types/tuple)

**戻り値**

L1ノルム、または [タクシー幾何学](https://en.wikipedia.org/wiki/Taxicab_geometry) における距離を返します。[`UInt*`](/docs/ja/reference/data-types/int-uint) または [`Float*`](/docs/ja/reference/data-types/float) または [`Decimal`](/docs/ja/reference/data-types/decimal)

**例**

**基本的な使い方**

```sql title=Query theme={null}
SELECT L1Norm((1, 2))
```

```response title=Response theme={null}
┌─L1Norm((1, 2))─┐
│              3 │
└────────────────┘
```

<div id="L1Normalize">
  ## L1Normalize
</div>

導入バージョン: v21.11.0

指定されたベクトルの `L1` 空間 ([タクシー幾何学](https://en.wikipedia.org/wiki/Taxicab_geometry)) における単位ベクトルを計算します (タプルの各要素は座標です) 。

**構文**

```sql theme={null}
L1Normalize(tuple)
```

**別名**: `normalizeL1`

**引数**

* `tuple` — 数値から成るタプル。[`Tuple(T)`](/docs/ja/reference/data-types/tuple)

**戻り値**

単位ベクトルを返します。[`Tuple(Float64)`](/docs/ja/reference/data-types/tuple)

**例**

**基本的な使い方**

```sql title=Query theme={null}
SELECT L1Normalize((1, 2))
```

```response title=Response theme={null}
┌─L1Normalize((1, 2))─────────────────────┐
│ (0.3333333333333333,0.6666666666666666) │
└─────────────────────────────────────────┘
```

<div id="L2Distance">
  ## L2Distance
</div>

導入バージョン: v21.11.0

ユークリッド空間における 2 点間の距離 (ベクトルの各要素が座標) を計算します ([ユークリッド距離](https://en.wikipedia.org/wiki/Euclidean_distance)) 。

**構文**

```sql theme={null}
L2Distance(vector1, vector2)
```

**別名**: `distanceL2`

**引数**

* `vector1` — 1 番目のベクトル。[`Tuple(T)`](/docs/ja/reference/data-types/tuple) または [`Array(T)`](/docs/ja/reference/data-types/array)
* `vector2` — 2 番目のベクトル。[`Tuple(T)`](/docs/ja/reference/data-types/tuple) または [`Array(T)`](/docs/ja/reference/data-types/array)

**戻り値**

2-ノルム距離を返します。入力が `Array` の場合、要素型の最小の共通スーパータイプが `Float32` または `BFloat16` であれば `Float32` を返し、それ以外の場合は `Float64` を返します。入力が `Tuple` の場合は、常に `Float64` を返します。[`Float*`](/docs/ja/reference/data-types/float)

**例**

**基本的な使い方**

```sql title=Query theme={null}
SELECT L2Distance((1, 2), (2, 3))
```

```response title=Response theme={null}
┌─L2Distance((1, 2), (2, 3))─┐
│         1.4142135623730951 │
└────────────────────────────┘
```

<div id="L2DistanceTransposed">
  ## L2DistanceTransposed
</div>

導入バージョン: v25.10.0

ユークリッド空間における 2 点間の近似距離 (ベクトルの各値を座標とする) を計算します ([ユークリッド距離](https://en.wikipedia.org/wiki/Euclidean_distance)) 。

**構文**

```sql theme={null}
L2DistanceTransposed(vector1, vector2, p[, used_dims])
```

**別名**: `distanceL2Transposed`

**引数**

* `vectors` — ベクトル。[`QBit(T, UInt64[, UInt64])`](/docs/ja/reference/data-types/qbit)
* `reference` — 参照ベクトル。[`Array(T)`](/docs/ja/reference/data-types/array)
* `p` — 距離計算で各ベクトル要素から使用するビット数 (1 から要素のビット幅まで) 。量子化レベルによって、精度と速度のトレードオフが決まります。ビット数を少なくすると I/O と計算は高速になりますが精度は低下し、ビット数を多くすると精度は向上しますが、その分パフォーマンスは低下します。[`UInt`](/docs/ja/reference/data-types/int-uint)
* `used_dims` — 任意。ストライド付き `QBit` に対して低次元 (Matryoshka) 検索を行うために読み取る先頭の次元数です。QBit の stride の倍数であり、その次元数を超えてはなりません。また、参照ベクトルは少なくともこの数だけの要素を持っている必要があります (末尾の余分な要素は無視されます) 。これらの次元をカバーする stride グループだけが読み取られます。[`UInt`](/docs/ja/reference/data-types/int-uint)

**戻り値**

近似的な 2-ノルム距離を返します。戻り値は常に `Float64` です。[`Float64`](/docs/ja/reference/data-types/float)

**例**

**基本的な使い方**

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
┌─L2DistanceTransposed([0, 1], [1, 2], 16)─┐
│                       1.3922918381215914 │
└──────────────────────────────────────────┘
```

<div id="L2DistanceTransposedQuantized">
  ## L2DistanceTransposedQuantized
</div>

導入バージョン: v26.7.0

`quantizeBFloat16ToInt8` のコードを持つ `QBit(Int8)` (オンザフライで逆量子化) と参照ベクトルの間の近似 [ユークリッド距離](https://en.wikipedia.org/wiki/Euclidean_distance) を計算します。`Float` の参照 (クエリ) ベクトルは、逆量子化されたコードの再構成精度である `Float32` 精度で直接比較されるため、`Float64` のクエリは `Float32` に縮小され、`BFloat16` のクエリは正確に `Float32` に拡張されます (非対称距離計算)。`Array(Int8)` の参照は、それ自体が `quantizeBFloat16ToInt8` のコードとして扱われ、その再構成レベルに逆量子化されます。`p` が切り詰めるのは保存された `QBit` コードだけである点に注意してください。`Array(Int8)` の参照は完全なクエリであり、常に完全な 8 ビット精度で再構成されるため、これは `p = 8` のときにのみ対称な量子化同士の距離になります (`p < 8` では、保存側だけがより粗い精度で読み取られます)。これは、量子化前の値が属していたのと同じ空間、つまり同じランダム回転とスケーリングを適用した後の空間になければならず、これを担保するのは呼び出し元の責任です。cosine distance はスケール不変ですが、内積と L2 距離 はそうではありません。

**構文**

```sql theme={null}
L2DistanceTransposedQuantized(vectors, reference, p[, used_dims])
```

**引数**

* `vectors` — `quantizeBFloat16ToInt8` コードのベクトル。[`QBit(Int8, UInt64[, UInt64])`](/docs/ja/reference/data-types/qbit)
* `reference` — 参照 (クエリ) ベクトル: `Float` 配列 (クエリ。`Float32` 精度で比較されます。`Float64` のクエリは `Float32` に変換されます)、または `quantizeBFloat16ToInt8` コードの [`Array(Int8)`](/docs/ja/reference/data-types/array) で、オンザフライで逆量子化されます。[`Array(Float32)`](/docs/ja/reference/data-types/array) または [`Array(Int8)`](/docs/ja/reference/data-types/array)
* `p` — 使用する、格納済み `QBit` コードの上位ビット数 (1 から 8) 。ビット数が少ないほど、より粗い埋め込み量子化器が再構築され、I/O は高速になりますが精度は低下します。8 ビットはフル精度の再構築です。`p` は格納済み `QBit` のみを切り詰めます。`Array(Int8)` の参照は常に完全な 8 ビット精度で再構築されます。[`UInt`](/docs/ja/reference/data-types/int-uint)
* `used_dims` — 任意。ストライド付き `QBit` に対して低次元 (Matryoshka) 検索を行うために読み取る先頭の次元数です。QBit の stride の倍数であり、その次元数を超えてはなりません。また、参照ベクトルは少なくともこの数の要素を持っている必要があります (末尾の余分な要素は無視されます)。これらの次元をカバーする stride グループだけが読み取られます。[`UInt`](/docs/ja/reference/data-types/int-uint)

**戻り値**

近似的な 2-ノルム距離を返します。戻り値は常に `Float64` です。[`Float64`](/docs/ja/reference/data-types/float)

**例**

**基本的な使い方**

```sql title=Query theme={null}
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;
```

<div id="L2Norm">
  ## L2Norm
</div>

導入バージョン: v21.11.0

ベクトル要素の二乗和の平方根を求めます。

**構文**

```sql theme={null}
L2Norm(vector)
```

**別名**: `normL2`

**引数**

* `vector` — 数値からなるベクトルまたはタプル。 [`Tuple(T)`](/docs/ja/reference/data-types/tuple) または [`Array(T)`](/docs/ja/reference/data-types/array)

**戻り値**

L2ノルムまたは[ユークリッド距離](https://en.wikipedia.org/wiki/Euclidean_distance)を返します。 [`UInt*`](/docs/ja/reference/data-types/int-uint) または [`Float*`](/docs/ja/reference/data-types/float)

**例**

**基本的な使い方**

```sql title=Query theme={null}
SELECT L2Norm((1, 2))
```

```response title=Response theme={null}
┌───L2Norm((1, 2))─┐
│ 2.23606797749979 │
└──────────────────┘
```

<div id="L2Normalize">
  ## L2Normalize
</div>

導入バージョン: v21.11.0

ユークリッド空間において、指定したベクトルの単位ベクトル (タプルの各要素は座標) を計算します ([ユークリッド距離](https://en.wikipedia.org/wiki/Euclidean_distance)を使用) 。

**構文**

```sql theme={null}
L2Normalize(tuple)
```

**別名**: `normalizeL2`

**引数**

* `tuple` — 数値からなるタプル。 [`Tuple(T)`](/docs/ja/reference/data-types/tuple)

**戻り値**

単位ベクトルを返します。 [`Tuple(Float64)`](/docs/ja/reference/data-types/tuple)

**例**

**基本的な使い方**

```sql title=Query theme={null}
SELECT L2Normalize((3, 4))
```

```response title=Response theme={null}
┌─L2Normalize((3, 4))─┐
│ (0.6,0.8)           │
└─────────────────────┘
```

<div id="L2SquaredDistance">
  ## L2SquaredDistance
</div>

導入バージョン: v22.7.0

2 つのベクトルの対応する要素間の差の二乗和を計算します。

**構文**

```sql theme={null}
L2SquaredDistance(vector1, vector2)
```

**別名**: `distanceL2Squared`

**引数**

* `vector1` — 1番目のベクトル。[`Tuple(T)`](/docs/ja/reference/data-types/tuple) または [`Array(T)`](/docs/ja/reference/data-types/array)
* `vector2` — 2番目のベクトル。[`Tuple(T)`](/docs/ja/reference/data-types/tuple) または [`Array(T)`](/docs/ja/reference/data-types/array)

**戻り値**

2つのベクトルの対応する要素の差の二乗和を返します。`Array` 入力の場合、要素型の最小共通スーパータイプが `Float32` または `BFloat16` なら `Float32`、それ以外は `Float64` を返します。`Tuple` 入力の場合、戻り値の型は要素ごとの演算の算術結果型に従います (整数型は保持されます) 。[`(U)Int*`](/docs/ja/reference/data-types/int-uint) または [`Float*`](/docs/ja/reference/data-types/float)

**例**

**基本的な使い方**

```sql title=Query theme={null}
SELECT L2SquaredDistance([1, 2, 3], [0, 0, 0])
```

```response title=Response theme={null}
┌─L2SquaredDis⋯ [0, 0, 0])─┐
│                       14 │
└──────────────────────────┘
```

<div id="L2SquaredNorm">
  ## L2SquaredNorm
</div>

導入バージョン: v22.7.0

ベクトル要素の二乗和の平方根である [`L2Norm`](#L2Norm) の二乗を計算します。

**構文**

```sql theme={null}
L2SquaredNorm(vector)
```

**別名**: `normL2Squared`

**引数**

* `vector` — 数値からなるベクトルまたはタプル。 [`Array(T)`](/docs/ja/reference/data-types/array) または [`Tuple(T)`](/docs/ja/reference/data-types/tuple)

**戻り値**

L2ノルムの二乗を返します。 [`UInt*`](/docs/ja/reference/data-types/int-uint) または [`Float*`](/docs/ja/reference/data-types/float) または [`Decimal`](/docs/ja/reference/data-types/decimal)

**例**

**基本的な使い方**

```sql title=Query theme={null}
SELECT L2SquaredNorm((1, 2))
```

```response title=Response theme={null}
┌─L2SquaredNorm((1, 2))─┐
│                     5 │
└───────────────────────┘
```

<div id="LinfDistance">
  ## LinfDistance
</div>

導入バージョン: v21.11.0

`L_{inf}` 空間における 2 点間の距離を計算します (ベクトルの要素が座標を表します)  ([最大ノルム](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#Maximum_norm_\(special_case_of:_infinity_norm,_uniform_norm,_or_supremum_norm\))) 。

**構文**

```sql theme={null}
LinfDistance(vector1, vector2)
```

**別名**: `distanceLinf`

**引数**

* `vector1` — 第1ベクトル。[`Tuple(T)`](/docs/ja/reference/data-types/tuple) または [`Array(T)`](/docs/ja/reference/data-types/array)
* `vector2` — 第2ベクトル。[`Tuple(T)`](/docs/ja/reference/data-types/tuple) または [`Array(T)`](/docs/ja/reference/data-types/array)

**戻り値**

無限大ノルム距離を返します。入力が `Array` の場合、要素型の最小共通スーパータイプが `Float32` または `BFloat16` であれば `Float32`、それ以外は `Float64` を返します。入力が `Tuple` の場合は、常に `Float64` を返します。[`Float*`](/docs/ja/reference/data-types/float)

**例**

**基本的な使い方**

```sql title=Query theme={null}
SELECT LinfDistance((1, 2), (2, 3))
```

```response title=Response theme={null}
┌─LinfDistance((1, 2), (2, 3))─┐
│                            1 │
└──────────────────────────────┘
```

<div id="LinfNorm">
  ## LinfNorm
</div>

導入バージョン: v21.11.0

ベクトル要素の絶対値の最大値を計算します。

**構文**

```sql theme={null}
LinfNorm(vector)
```

**別名**: `normLinf`

**引数**

* `vector` — 数値のベクトルまたはタプル。[`Array(T)`](/docs/ja/reference/data-types/array) または [`Tuple(T)`](/docs/ja/reference/data-types/tuple)

**戻り値**

Linf ノルム、つまり絶対値の最大値を返します。[`Float64`](/docs/ja/reference/data-types/float)

**例**

**基本的な使い方**

```sql title=Query theme={null}
SELECT LinfNorm((1, -2))
```

```response title=Response theme={null}
┌─LinfNorm((1, -2))─┐
│                 2 │
└───────────────────┘
```

<div id="LinfNormalize">
  ## LinfNormalize
</div>

導入バージョン: v21.11.0

与えられたベクトルの単位ベクトル (タプルの各要素が座標) を、`L_{inf}` 空間で計算します ([最大ノルム](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#Maximum_norm_\(special_case_of:_infinity_norm,_uniform_norm,_or_supremum_norm\)) を使用) 。

**構文**

```sql theme={null}
LinfNormalize(tuple)
```

**別名**: `normalizeLinf`

**引数**

* `tuple` — 数値のタプルです。 [`Tuple(T)`](/docs/ja/reference/data-types/tuple)

**戻り値**

単位ベクトルを返します。 [`Tuple(Float64)`](/docs/ja/reference/data-types/tuple)

**例**

**基本的な使い方**

```sql title=Query theme={null}
SELECT LinfNormalize((3, 4))
```

```response title=Response theme={null}
┌─LinfNormalize((3, 4))─┐
│ (0.75,1)              │
└───────────────────────┘
```

<div id="LpDistance">
  ## LpDistance
</div>

導入バージョン: v21.11.0

`Lp` 空間における 2 点間の距離 (ベクトルの要素を座標とする) を計算します ([p-ノルム距離](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#p-norm)) 。

**構文**

```sql theme={null}
LpDistance(vector1, vector2, p)
```

**別名**: `distanceLp`

**引数**

* `vector1` — 1つ目のベクトル。[`Tuple(T)`](/docs/ja/reference/data-types/tuple) または [`Array(T)`](/docs/ja/reference/data-types/array)
* `vector2` — 2つ目のベクトル。[`Tuple(T)`](/docs/ja/reference/data-types/tuple) または [`Array(T)`](/docs/ja/reference/data-types/array)
* `p` — べき指数。設定可能な値: `[1; inf)` の実数。[`UInt*`](/docs/ja/reference/data-types/int-uint) または [`Float*`](/docs/ja/reference/data-types/float)

**戻り値**

p-ノルム距離を返します。`Array` 入力の場合、要素型の最小共通スーパータイプが `Float32` または `BFloat16` であれば `Float32`、それ以外の場合は `Float64` を返します。`Tuple` 入力の場合は、常に `Float64` を返します。[`Float*`](/docs/ja/reference/data-types/float)

**例**

**基本的な使い方**

```sql title=Query theme={null}
SELECT LpDistance((1, 2), (2, 3), 3)
```

```response title=Response theme={null}
┌─LpDistance((1, 2), (2, 3), 3)─┐
│            1.2599210498948732 │
└───────────────────────────────┘
```

<div id="LpNorm">
  ## LpNorm
</div>

導入バージョン: v21.11.0

ベクトルの p-ノルムを計算します。これは、各要素の絶対値を p 乗して合計し、その p 乗根を取ったものです。

特殊なケース:

* p=1 のとき、L1Norm (マンハッタン距離) と同等です。
* p=2 のとき、L2Norm (ユークリッド距離) と同等です。
* p=∞ のとき、LinfNorm (最大ノルム) と同等です。

**構文**

```sql theme={null}
LpNorm(vector, p)
```

**別名**: `normLp`

**引数**

* `vector` — 数値からなるベクトルまたはタプル。[`Tuple(T)`](/docs/ja/reference/data-types/tuple) または [`Array(T)`](/docs/ja/reference/data-types/array)
* `p` — 指数。設定可能な値は `[1; inf)` の範囲の実数です。[`UInt*`](/docs/ja/reference/data-types/int-uint) または [`Float*`](/docs/ja/reference/data-types/float)

**戻り値**

[Lp-ノルム](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#p-norm) を返します。[`Float64`](/docs/ja/reference/data-types/float)

**例**

**基本的な使い方**

```sql title=Query theme={null}
SELECT LpNorm((1, -2), 2)
```

```response title=Response theme={null}
┌─LpNorm((1, -2), 2)─┐
│   2.23606797749979 │
└────────────────────┘
```

<div id="LpNormalize">
  ## LpNormalize
</div>

導入バージョン: v21.11.0

指定したベクトルの単位ベクトルを `Lp` 空間内で ([p-ノルム](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#p-norm)を用いて) 計算します。タプルの各要素は座標を表します。

**構文**

```sql theme={null}
LpNormalize(tuple, p)
```

**別名**: `normalizeLp`

**引数**

* `tuple` — 数値から成るタプル。[`Tuple(T)`](/docs/ja/reference/data-types/tuple)
* `p` — べき指数。設定可能な値は `[1; inf)` の範囲内の任意の数値です。[`UInt*`](/docs/ja/reference/data-types/int-uint) または [`Float*`](/docs/ja/reference/data-types/float)

**戻り値**

単位ベクトルを返します。[`Tuple(Float64)`](/docs/ja/reference/data-types/tuple)

**例**

**使用例**

```sql title=Query theme={null}
SELECT LpNormalize((3, 4), 5)
```

```response title=Response theme={null}
┌─LpNormalize((3, 4), 5)──────────────────┐
│ (0.7187302630182624,0.9583070173576831) │
└─────────────────────────────────────────┘
```

<div id="cosineDistance">
  ## cosineDistance
</div>

導入バージョン: v21.11.0

2 つのベクトル間の [コサイン距離](https://en.wikipedia.org/wiki/Cosine_similarity#Cosine_distance) を計算します (タプルの要素は座標です) 。戻り値が小さいほど、2 つのベクトルはより類似しています。

**構文**

```sql theme={null}
cosineDistance(vector1, vector2)
```

**別名**: `distanceCosine`

**引数**

* `vector1` — 1 番目のベクトル。[`Tuple(T)`](/docs/ja/reference/data-types/tuple) または [`Array(T)`](/docs/ja/reference/data-types/array)
* `vector2` — 2 番目のベクトル。[`Tuple(T)`](/docs/ja/reference/data-types/tuple) または [`Array(T)`](/docs/ja/reference/data-types/array)

**戻り値**

コサイン距離 (コサイン類似度から 1 を引いた値) を返します。`Array` を入力した場合、要素型の最小共通スーパータイプが `Float32` または `BFloat16` であれば `Float32`、それ以外の場合は `Float64` を返します。`Tuple` を入力した場合は、常に `Float64` を返します。[`Float*`](/docs/ja/reference/data-types/float)

**例**

**基本的な使い方**

```sql title=Query theme={null}
SELECT cosineDistance((1, 2), (2, 3));
```

```response title=Response theme={null}
┌─cosineDistance((1, 2), (2, 3))─┐
│           0.007722123286332261 │
└────────────────────────────────┘
```

<div id="cosineDistanceTransposed">
  ## cosineDistanceTransposed
</div>

導入バージョン: v26.1.0

2 点間の近似的な [コサイン距離](https://en.wikipedia.org/wiki/Cosine_similarity#Cosine_distance) を計算します (ベクトルの値を座標とみなします) 。戻り値が小さいほど、ベクトルはより類似しています。

**構文**

```sql theme={null}
cosineDistanceTransposed(vector1, vector2, p[, used_dims])
```

**別名**: `distanceCosineTransposed`

**引数**

* `vectors` — ベクトル。[`QBit(T, UInt64[, UInt64])`](/docs/ja/reference/data-types/qbit)
* `reference` — 参照ベクトル。[`Array(T)`](/docs/ja/reference/data-types/array)
* `p` — 距離計算で各ベクトル要素から使用するビット数 (1 から要素のビット幅まで) 。量子化レベルによって、精度と速度のトレードオフが決まります。使用するビット数を減らすと、精度は低下しますが、I/O と計算は高速になります。一方、ビット数を増やすと精度は向上しますが、パフォーマンスは低下します。[`UInt`](/docs/ja/reference/data-types/int-uint)
* `used_dims` — 省略可能。ストライド付き `QBit` で低次元 (Matryoshka) 検索を行うために、先頭から読み取る次元数です。QBit の stride の倍数であり、その次元数を超えてはなりません。また、参照ベクトルには少なくともこの数の要素が必要です (末尾の余分な要素は無視されます) 。これらの次元をカバーする stride グループのみが読み取られます。[`UInt`](/docs/ja/reference/data-types/int-uint)

**戻り値**

近似コサイン距離 (コサイン類似度を 1 から引いた値) を返します。返り値は常に Float64 です。[`Float64`](/docs/ja/reference/data-types/float)

**例**

**基本的な使い方**

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
┌─cosineDistanceTransposed([0, 1], [1, 2], 16)─┐
│                          0.10557280905788935 │
└──────────────────────────────────────────────┘
```

<div id="cosineDistanceTransposedQuantized">
  ## cosineDistanceTransposedQuantized
</div>

導入バージョン: v26.7.0

`quantizeBFloat16ToInt8` コードの `QBit(Int8)` (オンザフライで逆量子化) と参照ベクトルの間の近似的な [コサイン距離](https://en.wikipedia.org/wiki/Cosine_similarity#Cosine_distance) を計算します。戻り値が小さいほど、ベクトル同士の類似度は高くなります。`Float` の参照 (クエリ) ベクトルは、復量子化されたコードの再構成精度である `Float32` 精度で直接比較されます。つまり、`Float64` クエリは `Float32` に丸められ、`BFloat16` クエリは正確に `Float32` へ拡張されます (非対称な距離計算) 。一方、`Array(Int8)` の参照は、それ自体が `quantizeBFloat16ToInt8` コードとして扱われ、対応する再構成レベルへ復量子化されます。なお、`p` によって切り詰められるのは保存済みの `QBit` コードだけです。`Array(Int8)` の参照は完全なクエリそのものであり、常に完全な 8 ビット精度で再構成されます。そのため、これは `p = 8` の場合にのみ対称な量子化同士の距離となります (`p < 8` の場合は、保存側だけがより粗い精度で読み出されます) 。また、これは量子化前の値が属していた空間と同じ空間に存在している必要があります (つまり、同じランダム回転とスケーリングを適用した後の空間) 。これを保証するのは呼び出し側の責任です。コサイン距離はスケール不変ですが、内積と L2 距離はそうではありません。

**構文**

```sql theme={null}
cosineDistanceTransposedQuantized(vectors, reference, p[, used_dims])
```

**引数**

* `vectors` — `quantizeBFloat16ToInt8` コードのベクトル。[`QBit(Int8, UInt64[, UInt64])`](/docs/ja/reference/data-types/qbit)
* `reference` — 参照 (クエリ) ベクトル: `Float` の配列 (クエリは `Float32` 精度で比較され、`Float64` のクエリは `Float32` に変換されます) 、またはオンザフライで逆量子化される `quantizeBFloat16ToInt8` コードの `Array(Int8)`。[`Array(Float32)`](/docs/ja/reference/data-types/array) または [`Array(Int8)`](/docs/ja/reference/data-types/array)
* `p` — 各格納済み `QBit` コードで使用する上位ビット数 (1 ～ 8) 。ビット数が少ないほど、より粗い埋め込み量子化器が再構成されるため、精度は下がりますが I/O は高速になります。8 ビットはフル精度での再構成です。`p` で切り詰められるのは格納済み `QBit` のみで、`Array(Int8)` の参照は常に 8 ビットのフル精度で再構成されます。[`UInt`](/docs/ja/reference/data-types/int-uint)
* `used_dims` — 省略可。ストライド付き `QBit` に対する 低次元 (Matryoshka) 検索で読み取る先頭の次元数です。QBit の stride の倍数であり、その dimension を超えてはならず、参照ベクトルは少なくともこの数の要素を持っている必要があります (余分な末尾の要素は無視されます) 。これらの次元を含む stride グループ のみが読み取られます。[`UInt`](/docs/ja/reference/data-types/int-uint)

**戻り値**

近似 コサイン距離 (cosine similarity から 1 を引いた値) を返します。戻り値は常に `Float64` です。[`Float64`](/docs/ja/reference/data-types/float)

**例**

**基本的な使い方**

```sql title=Query theme={null}
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;
```

<div id="dotProductTransposed">
  ## dotProductTransposed
</div>

導入バージョン: v26.7.0

2 つのベクトルの近似的な [内積](https://en.wikipedia.org/wiki/Dot_product) (インナー積) を計算します (ベクトルの値を座標とみなします) 。距離関数とは異なり、これは類似度の指標です。戻り値が大きいほど、ベクトルはより類似しています。

**構文**

```sql theme={null}
dotProductTransposed(vector1, vector2, p[, used_dims])
```

**別名**: `scalarProductTransposed`

**引数**

* `vectors` — ベクトル。[`QBit(T, UInt64[, UInt64])`](/docs/ja/reference/data-types/qbit)
* `reference` — 参照ベクトル。[`Array(T)`](/docs/ja/reference/data-types/array)
* `p` — 計算で各ベクトル要素から使用するビット数 (1 から要素のビット幅まで) 。量子化レベルによって、精度と速度のトレードオフが決まります。使用するビット数を減らすと、精度は低下しますが、I/O と計算は高速になります。一方、ビット数を増やすと精度は向上しますが、パフォーマンスは低下します。[`UInt`](/docs/ja/reference/data-types/int-uint)
* `used_dims` — 省略可能。ストライド付き `QBit` に対する低次元 (Matryoshka) 検索のために、読み取る先頭の次元数です。QBit の stride の倍数であり、その次元数を超えてはなりません。また、参照ベクトルは少なくともこの数の要素を持っている必要があります (余分な末尾要素は無視されます) 。これらの次元をカバーする stride グループのみが読み取られます。[`UInt`](/docs/ja/reference/data-types/int-uint)

**戻り値**

2 つのベクトルの近似内積を返します。返り値は常に `Float64` です。[`Float64`](/docs/ja/reference/data-types/float)

**例**

**基本的な使い方**

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
┌─dotProductTransposed([0, 1], [1, 2], 16)─┐
│                                   2.0625 │
└──────────────────────────────────────────┘
```

<div id="dotProductTransposedQuantized">
  ## dotProductTransposedQuantized
</div>

導入バージョン: v26.7.0

`quantizeBFloat16ToInt8` のコードを持つ `QBit(Int8)` と参照ベクトルの間の近似的な [内積](https://en.wikipedia.org/wiki/Dot_product) (インナー積) を計算します (`QBit(Int8)` は オンザフライで逆量子化されます) 。これは類似度の指標です。戻り値が大きいほど、ベクトルはより類似しています。`Float` の参照 (クエリ) ベクトルは、逆量子化されたコードの再構成精度である `Float32` 精度で直接比較されるため、`Float64` クエリは `Float32` に縮小され、`BFloat16` クエリは正確に `Float32` に拡張されます (非対称距離計算) 。`Array(Int8)` の参照は、それ自体が `quantizeBFloat16ToInt8` のコードとして扱われ、再構成レベルに逆量子化されます。`p` は保存された `QBit` コードのみを切り詰める点に注意してください。`Array(Int8)` の参照は完全なクエリであり、常に完全な 8 ビット精度で再構成されるため、これは `p = 8` の場合にのみ対称な量子化対量子化距離になります (`p < 8` の場合、より粗い精度で読み取られるのは保存側だけです) 。これは、量子化前の値が属していたのと同じ空間、すなわち同じランダム回転とスケーリングを適用した後の空間に属している必要があり、これを保証するのは呼び出し側の責任です。コサイン距離はスケール不変ですが、内積と L2 距離はそうではありません。

**構文**

```sql theme={null}
dotProductTransposedQuantized(vectors, reference, p[, used_dims])
```

**引数**

* `vectors` — `quantizeBFloat16ToInt8` コードのベクトル。[`QBit(Int8, UInt64[, UInt64])`](/docs/ja/reference/data-types/qbit)
* `reference` — 参照 (クエリ) ベクトル: `Float` 配列 (クエリは `Float32` 精度で比較され、`Float64` クエリは `Float32` に縮小されます) 、または `quantizeBFloat16ToInt8` コードの `Array(Int8)` で、オンザフライで逆量子化されます。[`Array(Float32)`](/docs/ja/reference/data-types/array) または [`Array(Int8)`](/docs/ja/reference/data-types/array)
* `p` — 使用する、格納された各 `QBit` コードの上位ビット数 (1 から 8) 。ビット数を減らすと、より粗い埋め込み量子化器が再構成され、精度は低下しますが I/O は高速になります。8 ビットはフル精度の再構成です。`p` が切り詰めるのは格納された `QBit` のみであり、`Array(Int8)` の参照は常に完全な 8 ビット精度で再構成されます。[`UInt`](/docs/ja/reference/data-types/int-uint)
* `used_dims` — 省略可能。ストライド付き `QBit` に対する低次元 (Matryoshka) 検索のために、読み取る先頭の次元数です。QBit の stride の倍数であり、その次元数を超えてはなりません。また、参照ベクトルは少なくともこの数の要素を持っている必要があります (末尾に余分な要素がある場合は無視されます) 。これらの次元をカバーする stride グループのみが読み取られます。[`UInt`](/docs/ja/reference/data-types/int-uint)

**戻り値**

2 つのベクトルの近似内積を返します。返り値は常に Float64 です。[`Float64`](/docs/ja/reference/data-types/float)

**例**

**基本的な使い方**

```sql title=Query theme={null}
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;
```
