跳到主要内容
跳到主要内容

距离函数

L1Distance

引入于: v21.11

计算两个点之间的距离(向量的元素为坐标)在 L1 空间中 (1-范数 (出租车几何 距离)).

语法

L1Distance(vector1, vector2)

参数

返回值

返回 1-范数距离. UInt32Float64

示例

基本用法

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

L1Norm

引入于: v21.11

计算向量的绝对元素之和.

语法

L1Norm(vector)

参数

返回值

返回 L1范数或 出租车几何距离. UInt*Float*Decimal

示例

基本用法

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

L1Normalize

引入于: v21.11

计算给定向量的单位向量(元组的元素为坐标)在 L1 空间中 (出租车几何).

语法

L1Normalize(tuple)

参数

  • tuple — 一个数字值的元组. Tuple(T)

返回值

返回单位向量. Tuple(Float64)

示例

基本用法

SELECT L1Normalize((1, 2))
┌─L1Normalize((1, 2))─────────────────────┐
│ (0.3333333333333333,0.6666666666666666) │
└─────────────────────────────────────────┘

L2Distance

引入于: v21.11

计算两个点之间的距离(向量的元素为坐标)在欧几里得空间中 (欧几里得距离).

语法

L2Distance(vector1, vector2)

参数

返回值

返回 2-范数距离. Float64

示例

基本用法

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

L2DistanceTransposed

引入于: v25.10

计算两个点之间的近似距离(向量的值为坐标)在欧几里得空间中 (欧几里得距离).

语法

L2DistanceTransposed(vector1, vector2, p)

参数

  • vectors — 向量. QBit(T, UInt64)
  • reference — 参考向量. Array(T)
  • p — 从每个向量元素中使用的位数用于距离计算 (1到元素位宽). 量化级别控制精度与速度的权衡. 使用较少位数会导致更快的输入/输出和计算,但精度降低,而使用更多位数会提高精度,但性能下降. UInt

返回值

返回近似的 2-范数距离. Float

示例

基本用法

CREATE TABLE qbit (id UInt32, vec QBit(Float64, 2)) ENGINE = Memory;
INSERT INTO qbit VALUES (1, [0, 1]);
SELECT L2DistanceTransposed(vec, array(1.0, 2.0), 16) FROM qbit;"
┌─L2DistanceTransposed([0, 1], [1.0, 2.0], 16)─┐
│                           1.4142135623730951 │
└──────────────────────────────────────────────┘

L2Norm

引入于: v21.11

计算向量元素平方和的平方根.

语法

L2Norm(vector)

参数

返回值

返回 L2范数或 欧几里得距离. UInt*Float*

示例

基本用法

SELECT L2Norm((1, 2))
┌───L2Norm((1, 2))─┐
│ 2.23606797749979 │
└──────────────────┘

L2Normalize

引入于: v21.11

计算给定向量的单位向量(元组的元素为坐标)在欧几里得空间中 (使用 欧几里得距离).

语法

L2Normalize(tuple)

参数

  • tuple — 一个数字值的元组. Tuple(T)

返回值

返回单位向量. Tuple(Float64)

示例

基本用法

SELECT L2Normalize((3, 4))
┌─L2Normalize((3, 4))─┐
│ (0.6,0.8)           │
└─────────────────────┘

L2SquaredDistance

引入于: v22.7

计算两个向量对应元素差的平方和.

语法

L2SquaredDistance(vector1, vector2)

参数

返回值

返回两个向量对应元素差的平方和. Float64

示例

基本用法

SELECT L2SquaredDistance([1, 2, 3], [0, 0, 0])
┌─L2SquaredDis⋯ [0, 0, 0])─┐
│                       14 │
└──────────────────────────┘

L2SquaredNorm

引入于: v22.7

计算向量元素的平方和的平方根 (即 L2Norm 的平方).

语法

L2SquaredNorm(vector)

参数

返回值

返回 L2范数的平方. UInt*Float*Decimal

示例

基本用法

SELECT L2SquaredNorm((1, 2))
┌─L2SquaredNorm((1, 2))─┐
│                     5 │
└───────────────────────┘

LinfDistance

引入于: v21.11

计算两个点之间的距离(向量的元素为坐标)在 L_{inf} 空间中 (最大范数).

语法

LinfDistance(vector1, vector2)

参数

返回值

返回无穷大范数距离. Float64

示例

基本用法

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

LinfNorm

引入于: v21.11

计算向量的绝对元素的最大值.

语法

LinfNorm(vector)

参数

返回值

返回 Linf范数或绝对值的最大值. Float64

示例

基本用法

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

LinfNormalize

引入于: v21.11

计算给定向量的单位向量(元组的元素为坐标)在 L_{inf} 空间中 (使用 最大范数).

语法

LinfNormalize(tuple)

参数

  • tuple — 一个数字值的元组. Tuple(T)

返回值

返回单位向量. Tuple(Float64)

示例

基本用法

SELECT LinfNormalize((3, 4))
┌─LinfNormalize((3, 4))─┐
│ (0.75,1)              │
└───────────────────────┘

LpDistance

引入于: v21.11

计算两个点之间的距离(向量的元素为坐标)在 Lp 空间中 (p-范数距离).

语法

LpDistance(vector1, vector2, p)

参数

返回值

返回 p-范数距离. Float64

示例

基本用法

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

LpNorm

引入于: v21.11

计算向量的 p-范数,即绝对元素的 p 次方和的 p 次根.

特殊情况:

  • 当 p=1 时,相当于 L1Norm (曼哈顿距离).
  • 当 p=2 时,相当于 L2Norm (欧几里得距离).
  • 当 p=∞ 时,相当于 LinfNorm (最大范数).

语法

LpNorm(vector, p)

参数

  • vector — 向量或数字值的元组. Tuple(T)Array(T)
  • p — 幂. 可能的值为范围在 [1; inf) 之内的实数. UInt*Float*

返回值

返回 Lp-norm. Float64

示例

基本用法

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

LpNormalize

引入于: v21.11

计算给定向量的单位向量(元组的元素为坐标)在 Lp 空间中 (使用 p-范数).

语法

LpNormalize(tuple, p)

参数

  • tuple — 一个数字值的元组. Tuple(T)
  • p — 幂. 可能的值为在范围从 [1; inf) 之内的任何数. UInt*Float*

返回值

返回单位向量. Tuple(Float64)

示例

基本用法

SELECT LpNormalize((3, 4), 5)
┌─LpNormalize((3, 4), 5)──────────────────┐
│ (0.7187302630182624,0.9583070173576831) │
└─────────────────────────────────────────┘

cosineDistance

引入于: v1.1

计算两个向量之间的余弦距离(元组的元素为坐标)。返回值越小,向量越相似.

语法

cosineDistance(vector1, vector2)

参数

返回值

返回两个向量之间的角度的余弦值减去1. Float64

示例

基本用法

SELECT cosineDistance((1, 2), (2, 3));
┌─cosineDistance((1, 2), (2, 3))─┐
│           0.007722123286332261 │
└────────────────────────────────┘