L2_DISTANCE
2 つのベクトル間のユークリッド(L2)距離を計算し、ベクトル空間におけるそれらの直線距離を測定します。
構文
L2_DISTANCE(vector1, vector2)
引数
vector1: 1 つ目のベクトル(VECTOR データ型)vector2: 2 つ目のベクトル(VECTOR データ型)
戻り値
2 つのベクトル間のユークリッド(L2)距離を表す FLOAT 値を返します。この値は常に非負です。
- 0: 同一のベクトル
- より大きい値: より離れているベクトル
説明
L2 距離はユークリッド距離とも呼ばれ、ユークリッド空間における 2 点間の直線距離を測定します。これは、ベクトル類似度検索や機械学習アプリケーションで最も一般的に使用される指標の 1 つです。
この関数は次の処理を行います。
- 2 つの入力ベクトルの長さが同じであることを検証する
- 対応する要素間の差の二乗和を計算する
- その合計の平方根を返す
実装されている数式は次のとおりです。
L2_distance(v1, v2) = √(Σ(v1ᵢ - v2ᵢ)²)
ここで、v1ᵢ と v2ᵢ は入力ベクトルの要素です。
例
基本的な使用方法
-- Calculate L2 distance between two vectors
SELECT L2_DISTANCE([1.0, 2.0, 3.0]::vector(3), [4.0, 5.0, 6.0]::vector(3)) AS distance;
結果:
╭──────────╮
│ distance │
├──────────┤
│ 5.196152 │
╰──────────╯
ベクトルデータを含むテーブルを作成します。
CREATE OR REPLACE TABLE vectors (
id INT,
vec VECTOR(3)
);
INSERT INTO vectors VALUES
(1, [1.0000, 2.0000, 3.0000]),
(2, [1.0000, 2.2000, 3.0000]),
(3, [4.0000, 5.0000, 6.0000]);
L2 距離を使用して [1, 2, 3] に最も近いベクトルを見つけます。
SELECT
id,
vec,
L2_DISTANCE(vec, [1.0000, 2.0000, 3.0000]::VECTOR(3)) AS distance
FROM
vectors
ORDER BY
distance ASC;
╭─────────────────────────────╮
│ id │ vec │ distance │
├────┼───────────┼────────────┤
│ 1 │ [1,2,3] │ 0 │
│ 2 │ [1,2.2,3] │ 0.20000005 │
│ 3 │ [4,5,6] │ 5.196152 │
╰─────────────────────────────╯