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

距离函数

L1Distance

自 v21.11 引入

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

语法

L1Distance(vector1, vector2)

别名: distanceL1

参数

返回值

返回 1 范数距离。UInt32Float64

示例

基本用法

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

L1Norm

引入版本:v21.11

计算向量中所有元素绝对值的和。

语法

L1Norm(vector)

别名: normL1

参数

返回值

返回 L1 范数或 taxicab geometry(出租车几何)距离。UInt*Float*Decimal

示例

基本用法

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

L1Normalize

自 v21.11 引入

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

语法

L1Normalize(tuple)

别名: normalizeL1

参数

  • tuple — 数值构成的元组。Tuple(T)

返回值

返回单位向量。Tuple(Float64)

示例

基本用法

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

L2Distance

引入版本:v21.11

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

语法

L2Distance(vector1, vector2)

别名: distanceL2

参数

返回值

返回 L2 范数距离。Float64

示例

基本用法

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

L2DistanceTransposed

引入版本:v25.10

计算欧几里得空间中两点之间的近似欧几里得距离(向量的各分量表示点的坐标)(欧几里得距离)。

语法

L2DistanceTransposed(vector1, vector2, p)

别名: distanceL2Transposed

参数

  • vectors — 向量。QBit(T, UInt64)
  • reference — 参考向量。Array(T)
  • p — 在距离计算中,从每个向量元素中使用的位数(1 到元素的位宽)。量化级别控制精度与速度之间的权衡。使用更少的位可加快 I/O 和计算速度,但精度会降低;使用更多的位则会提高精度,但以性能为代价。UInt

返回值

返回近似的 2-范数距离。Float64

示例

基本用法

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)

别名: normL2

参数

返回值

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

示例

基础用法

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

L2Normalize

自 v21.11 引入

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

语法

L2Normalize(tuple)

别名: normalizeL2

参数

返回值

返回单位向量。Tuple(Float64)

示例

基本用法

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

L2SquaredDistance

引入于:v22.7

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

语法

L2SquaredDistance(vector1, vector2)

别名distanceL2Squared

参数

返回值

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

示例

基础用法

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

L2SquaredNorm

引入版本:v22.7

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

语法

L2SquaredNorm(vector)

别名normL2Squared

参数

返回值

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

示例

基本用法

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

LinfDistance

引入于:v21.11

计算两个点在 L_{inf} 空间([最大范数](https://en.wikipedia.org/wiki/Norm_(mathematics)#Maximum_norm_(special_case_of:_infinity_norm,_uniform_norm,_or_supremum_norm)))下的距离(向量的元素为坐标)。

语法

LinfDistance(vector1, vector2)

别名: distanceLinf

参数

返回值

返回无穷范数距离。Float64

示例

基本用法

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

LinfNorm

首次引入版本:v21.11

计算向量中各元素绝对值的最大值。

语法

LinfNorm(vector)

别名: normLinf

参数

返回值

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

示例

基本用法

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

LinfNormalize

引入版本:v21.11

L_{inf} 空间下,使用最大范数,计算给定向量(元组的各元素作为坐标)的单位向量。

语法

LinfNormalize(tuple)

别名: normalizeLinf

参数

返回值

返回单位向量。Tuple(Float64)

示例

基本用法

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

LpDistance

引入于:v21.11

Lp 空间中计算两点之间的距离(其中向量的元素为坐标,即 p-范数距离)。

语法

LpDistance(vector1, vector2, p)

别名: distanceLp

参数

返回值

返回 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)

别名: normLp

参数

  • vector — 数值向量或元组。Tuple(T)Array(T)
  • p — 幂指数。可以是区间 [1; inf) 内的任意实数。UInt*Float*

返回值

返回 Lp 范数Float64

示例

基本用法

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

LpNormalize

引入自:v21.11

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

语法

LpNormalize(tuple, p)

别名normalizeLp

参数

  • 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 │
└────────────────────────────────┘