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

距离函数

L1Distance

自 v21.11 起引入

计算两个点在 L1 空间中的距离(向量的元素为坐标),即 1-范数(taxicab geometry 距离)。

语法

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(Float64)

示例

基本用法

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

L2Distance

引入版本:v21.11

计算欧几里得空间中两点之间的距离(向量的元素表示坐标)(Euclidean distance)。

语法

L2Distance(vector1, vector2)

别名: distanceL2

参数

返回值

返回 2-范数距离。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, 2), 16) FROM qbit;
┌─L2DistanceTransposed([0, 1], [1, 2], 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} 空间(最大范数)中两点之间的距离(向量的元素即为坐标)。

语法

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} 空间中(使用 maximum norm)。

语法

LinfNormalize(tuple)

别名: normalizeLinf

参数

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

返回值

返回一个单位向量。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 │
└────────────────────────────────┘

cosineDistanceTransposed

自 v26.1 引入

计算两点之间的近似余弦距离(向量的各分量作为坐标)。返回值越小,向量越相似。

语法

cosineDistanceTransposed(vector1, vector2, p)

别名: distanceCosineTransposed

参数

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

返回值

返回 1 减去两个向量夹角余弦的近似值。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([0, 1], [1, 2], 16)─┐
│                          0.10557281085638826 │
└──────────────────────────────────────────────┘