Source: https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/functions/vector/ Documentation version: v5.3.2 # 向量函数 本文介绍 GQL 支持的向量算术运算及向量函数,并提供示例演示如何使用这些函数。 ## 向量的算术运算 向量的算术运算包含向量间的加法、减法,以及向量与数字的加法、减法、乘法和除法。执行向量间运算时需要确保所有向量的维度数相同。更多信息,请参见[支持的算术运算](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-types/vector-type/#_4)。 ### 示例 #### 向量间相加 ```` 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() 返回两个向量的余弦相似度。 余弦相似度是通过计算两个向量的[内积](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/functions/vector/#inner_product)并将其除以它们的模长的乘积来计算的。 当两个向量的模长均不为 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()`](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/functions/math/#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()`](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/functions/math/#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()`](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/functions/math/#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()`](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/functions/math/#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()`](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/functions/math/#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() 返回一个向量的平方欧几里得范数。平方欧几里得范数是该向量各个元素的平方和,即[欧几里得范数](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/functions/vector/#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 | +-----------+ ````