跳转至
开发版采用单机部署,无需产品 License 文件。需要多机部署或大规模性能测试? 了解企业版

向量函数

本文介绍 GQL 支持的向量算术运算及向量函数,并提供示例演示如何使用这些函数。

向量的算术运算

向量的算术运算包含向量间的加法、减法,以及向量与数字的加法、减法、乘法和除法。执行向量间运算时需要确保所有向量的维度数相同。更多信息,请参见支持的算术运算。

示例

向量间相加

LET x = VECTOR<3, FLOAT>([10.1, 20.2, 30.3]), y = VECTOR<3, FLOAT>([2.2, 3.3, 4.4]) RETURN x + y AS z

返回:

+------------------+
| z                |
+------------------+
| [12.3,23.5,34.7] |
+------------------+

向量间相减

LET x = VECTOR<3, FLOAT>([10.1, 20.2, 30.3]), y = VECTOR<3, FLOAT>([2.0, 3.0, 4.0]) RETURN x - y AS z

返回:

+-----------------+
| z               |
+-----------------+
| [8.1,17.2,26.3] |
+-----------------+

向量与数字相加

LET x = VECTOR<3, FLOAT>([1.1, 2.2, 3.3]) RETURN x + 1 AS x

返回:

+---------------+
| x             |
+---------------+
| [2.1,3.2,4.3] |
+---------------+

向量与数字相减

LET x = VECTOR<3, FLOAT>([10.1, 2.2, 3.3]) RETURN x - 1 AS x

返回:

+---------------+
| x             |
+---------------+
| [9.1,1.2,2.3] |
+---------------+

向量与数字相乘

LET x = VECTOR<3, FLOAT>([1.1, 2.2, 3.3]) RETURN x * 2 AS x

返回:

+---------------+
| x             |
+---------------+
| [2.2,4.4,6.6] |
+---------------+

向量与数字相除

LET x = VECTOR<3, FLOAT>([1.1, 2.2, 3.3]) RETURN x / 2 AS x

返回:

+-----------------+
| x               |
+-----------------+
| [0.55,1.1,1.65] |
+-----------------+

euclidean()

返回两个向量之间的欧几里得距离。欧几里得距离是多维空间中两个向量之间的直线距离。

NULL 行为:默认

函数签名

euclidean(v1: VECTOR, v2: VECTOR) -> FLOAT

或

vector_distance(v1: VECTOR, v2: VECTOR [EUCLIDEAN]) -> FLOAT

向量v1和v2的维度数必须相同。

示例

示例 1:

RETURN euclidean(VECTOR<3,FLOAT>([1,2,3]), VECTOR<3,FLOAT>([4,5,6])) AS euclidean_distance

或

RETURN vector_distance(VECTOR<3,FLOAT>([1,2,3]), VECTOR<3,FLOAT>([4,5,6]) EUCLIDEAN) AS euclidean_distance

返回:

+--------------------+
| euclidean_distance |
+--------------------+
| 5.196152           |
+--------------------+

示例 2:

RETURN euclidean(VECTOR<3,FLOAT>([1,2,3]), null) AS euclidean_distance

返回:

+--------------------+
| euclidean_distance |
+--------------------+
| null               |
+--------------------+

inner_product()

返回两个向量的内积。

内积,也称为点积,计算两个向量中对应坐标的乘积之和。若两个向量的夹角小于 90 度,则点积为正;若夹角大于 90 度,则点积为负;若两个向量正交,则点积为零。

NULL 行为:默认

函数签名

inner_product(v1: VECTOR, v2: VECTOR) -> FLOAT

或

vector_distance(v1: VECTOR, v2: VECTOR DOT) -> FLOAT

向量v1和v2的维度数必须相同。

示例

示例 1:

RETURN inner_product(VECTOR<3,FLOAT>([1,2,3]), VECTOR<3,FLOAT>([4,5,6])) AS ip

或

RETURN vector_distance(VECTOR<3,FLOAT>([1,2,3]), VECTOR<3,FLOAT>([4,5,6]) DOT) AS ip

返回:

+------+
| ip   |
+------+
| 32.0 |
+------+

示例 2:

RETURN inner_product(VECTOR<3,FLOAT>([1,2,3]), null) AS ip

返回:

+------+
| ip   |
+------+
| null |
+------+

cosine()

返回两个向量的余弦相似度。

余弦相似度是通过计算两个向量的内积并将其除以它们的模长的乘积来计算的。

当两个向量的模长均不为 0 时,余弦相似度的取值范围为[-1, 1]。

NULL 行为:默认

函数签名

cosine(v1: VECTOR, v2: VECTOR) -> FLOAT

或

vector_distance(v1: VECTOR, v2: VECTOR COSINE) -> FLOAT

向量v1和v2的维度数必须相同。

示例

示例 1:

RETURN cosine(VECTOR<3,FLOAT>([1,2,3]), VECTOR<3,FLOAT>([4,5,6])) AS cos

或

RETURN vector_distance(VECTOR<3,FLOAT>([1,2,3]), VECTOR<3,FLOAT>([4,5,6]) COSINE) AS cos

返回:

+-----------+
| cos       |
+-----------+
| 0.9746318 |
+-----------+

示例 2:

RETURN cosine(VECTOR<3,FLOAT>([1,2,3]), null) AS cos

返回:

+------+
| cos  |
+------+
| null |
+------+

abs()

返回一个向量,其中每个元素都是给定向量中对应元素的绝对值。

该函数还支持数值数据类型。更多信息,请参见数学函数abs()。

NULL 行为:默认

函数签名

abs(v: VECTOR) -> VECTOR

示例

LET x = VECTOR<3, FLOAT>([1.1, -2.2, 3.3]) RETURN abs(x) AS x

返回:

+------------------+
| x                |
+------------------+
| [1.1,2.2,3.3]    |
+------------------+

abs2()

返回一个向量,其中每个元素都是给定向量中对应元素的平方。

NULL 行为:默认

函数签名

abs2(v: VECTOR) -> VECTOR

示例

LET x = VECTOR<3, FLOAT>([1.1, -2.2, 3.3]) RETURN abs2(x) AS x

返回:

+-----------------------+
| x                     |
+-----------------------+
| [1.21,4.84,10.889999] |
+-----------------------+

sqrt()

返回一个向量,其中每个元素都是给定向量中对应元素的平方根。

该函数还支持数值数据类型。更多信息,请参见数学函数sqrt()。

NULL 行为:默认

函数签名

sqrt(num: VECTOR) -> VECTOR

示例

LET x = VECTOR<3, FLOAT>([1.21,4.84,10.89]) RETURN sqrt(x) AS x

返回:

+---------------+
| x             |
+---------------+
| [1.1,2.2,3.3] |
+---------------+

ln()

返回一个向量,其中每个元素都是给定向量中对应元素在自然底数e下的对数值。

自然底数e是一个无限不循环的小数,约等于 2.71828。

该函数还支持数值数据类型。更多信息,请参见数学函数ln()。

NULL 行为:默认

函数签名

ln(v: VECTOR) ->  VECTOR 

示例

LET x = VECTOR<3, FLOAT>([64.0, 256.0, 16.0]) RETURN ln(x) AS x 

返回:

+--------------------------------+
| x                              |
+--------------------------------+
| [4.158883,5.5451775,2.7725887] |
+--------------------------------+

log10()

返回一个向量,其中每个元素都是给定向量中对应元素在以 10 为底数下的对数值。

该函数还支持数值数据类型。更多信息,请参见数学函数log10()。

NULL 行为:默认

函数签名

log10(v: VECTOR) ->  VECTOR

示例

LET x = VECTOR<3, FLOAT>([64.0, 256.0, 16.0]) RETURN log10(x) AS x

返回:

+---------------------------+
| x                         |
+---------------------------+
| [1.80618,2.40824,1.20412] |
+---------------------------+

exp()

返回一个向量,其中每个元素都是给定向量中对应元素为幂,底数为e的指数值。

自然底数e是一个无限不循环的小数,约等于 2.71828。

该函数还支持数值数据类型。更多信息,请参见数学函数exp()。

NULL 行为:默认

函数签名

exp(v: VECTOR) ->  VECTOR

示例

LET x = VECTOR<3, FLOAT>([1, 2, 3]) RETURN exp(x) AS x

返回:

+--------------------------------+
| x                              |
+--------------------------------+
| [2.7182817,7.389056,20.085537] |
+--------------------------------+

normalize()

返回一个向量的归一化结果,即将向量的长度调整为 1,归一化后的向量方向与原向量相同。

NULL 行为:默认

函数签名

normalize(v: VECTOR) ->  VECTOR

示例

LET x = VECTOR<3, FLOAT>([1, 2, 3]) RETURN normalize(x) AS x

返回:

+----------------------------------+
| x                                |
+----------------------------------+
| [0.26726124,0.5345225,0.8017837] |
+----------------------------------+

accum()

返回一个向量中所有元素的总和。

NULL 行为:默认

函数签名

accum(v: VECTOR) ->  FLOAT

示例

LET x = VECTOR<3, FLOAT>([10.1, 20.2, 30.3]) RETURN accum(x) AS z

返回:

+------+
| z    |
+------+
| 60.6 |
+------+

mean()

返回一个向量中所有元素间的平均值。

NULL 行为:默认

函数签名

mean(v: VECTOR) ->  FLOAT

示例

LET x = VECTOR<3, FLOAT>([1.1, 2.2, 3.3]) RETURN mean(x) AS z

返回:

+-----+
| z   |
+-----+
| 2.2 |
+-----+

prod()

返回一个向量中所有元素的乘积,即将向量中的所有元素相乘得到的结果。

NULL 行为:默认

函数签名

prod(v: VECTOR) ->  FLOAT

示例

LET x = VECTOR<3, FLOAT>([1.1, 2.2, 3.3]) RETURN prod(x) AS z

返回:

+-------+
| z     |
+-------+
| 7.986 |
+-------+

norm()

返回一个向量的欧几里得范数。欧几里得范数是多维空间中该向量的长度。

NULL 行为:默认

函数签名

norm(v: VECTOR) ->  FLOAT

示例

LET x = VECTOR<3, FLOAT>([1.1, 2.2, 3.3]) RETURN norm(x) AS z

返回:

+----------+
| z        |
+----------+
| 4.115823 |
+----------+

squared_norm()

返回一个向量的平方欧几里得范数。平方欧几里得范数是该向量各个元素的平方和,即欧几里得范数的平方。

NULL 行为:默认

函数签名

squared_norm(v: VECTOR) ->  FLOAT

示例

LET x = VECTOR<3, FLOAT>([1.1, 2.2, 3.3]) RETURN squared_norm(x) AS z

返回:

+-----------+
| z         |
+-----------+
| 16.939999 |
+-----------+