文本、语音、图像、视频都能够以向量的形式保存在向量数据库中,方便用户快速搜索和查询。日志服务支持向量计算函数,本文介绍向量计算函数的基本语法和示例。
向量计算函数列表
以下函数中使用的向量元素,可以用特定格式的字符串来描述,字符串是用"[]"或者"{}"包起来的一组数字,数字之间用逗号分隔开。
函数名称 | 语法 | 说明 | 返回值类型 |
| 计算两个向量之间的余弦相似度。 余弦相似度的取值范围是[-1, 1]:
| double | |
| 计算两个向量的内积(点积)。 | double | |
| 计算两个向量的欧式距离。 | double | |
| 计算一个向量的范数。范数相当于向量的长度。 | double | |
| 计算一个向量的所有元素之和。 | double | |
| 计算一个向量的平均值。 | double | |
| 计算一个向量的方差。方差代表向量元素偏离均值的平均波动幅度的平方和,描述了该向量中元素分布的离散程度。 | double | |
| 计算一个向量的标准差,标准差是方差的正平方根。方差描述了数据点围绕均值的波动大小。方差越大,表示数据点越分散;方差越小,表示数据点越集中。 | double | |
| 计算两个向量相加的结果。 结合向量加减法和向量缩放,可以做任意线性变换。 | array(double) | |
| 计算两个向量相减的结果。 结合向量的加减法和向量的缩放,可以做任意线性变换。 | array(double) | |
| 结合向量的加减法和向量的缩放,可以做任何线性变换。 | array(double) | |
| 计算两个向量对应元素相乘的结果,返回结果向量。 | array(double) | |
| 计算两个向量对应元素相除的结果,返回结果向量。 | array(double) | |
| 向量的每一个元素都加上一个常数,返回结果向量。 | array(double) | |
vector_fill_nan(varchar vector1, varchar fill_option) | 对向量中出现的缺失值进行填充,向量中的元素如果为 参数 | array(double) |
cosine_similarity函数
计算两个向量的余弦相似度。
使用示例
查询和分析语句
* | SELECT cosine_similarity(array[1, 2, 3, 4], array[10, 20, 30, 40])
或
* | SELECT cosine_similarity('[1, 2, 3, 4]', '[10, 20, 30, 40]')
返回结果
1
inner_product函数
计算两个向量的内积。
使用示例
查询和分析语句
* | SELECT inner_product(array[1, 2, 3, 4], array[10, 20, 30, 40])
或
* | SELECT inner_product('[1, 2, 3, 4]', '[10, 20, 30, 40]')
返回结果
300.0
l2_distance函数或euclidean_distance函数
l2_distance开头为字母L的小写形式。
计算两个向量的欧式距离。
使用示例
查询和分析语句
* | SELECT l2_distance(array[1, 3], array[4, 2])
或
* | SELECT l2_distance('[1, 3]', '[4, 2]')
返回结果
3.16
vector_norm函数
根据范数类型p
,计算向量的范数(norm)。
使用示例
查询和分析语句
* | SELECT vector_norm(array[1, 3], 1)
* | SELECT vector_norm(array[1, 3], 2)
* | SELECT vector_norm(array[1, 3], 3)
返回结果
根据范数类型1、2、3,分别计算向量
[1,3]
的范数。范数类型为1时,计算向量元素的绝对值和为4
。范数类型为2时,计算向量元素的平方和的平方根,结果为3.16
。范数类型为3时,计算向量元素的三次方和的三次方根,结果为3.04
。
vector_sum函数
计算一个向量所有元素的和。
使用示例
查询和分析语句
* | SELECT vector_sum(array[1, -3])
或
* | SELECT vector_sum('[1, -3]')
返回结果
-2
vector_mean函数
计算一个向量所有元素的平均值。
使用示例
查询和分析语句
* | SELECT vector_mean(array[1, -3])
或
* | SELECT vector_mean('[1, -3]')
返回结果
-1
vector_variance函数
计算一个向量的方差,描述了该向量中元素分布的离散程度。
使用示例
查询和分析语句
* | SELECT vector_variance(array[1, -3, 8])
或
* | SELECT vector_variance('[1, -3, 8]')
返回结果
向量均值为2,结果为
(12+52+62=62/3)=20.67
。
返回值类型
与输入的参数值相同。
vector_std_dev函数
计算一个向量的标准差,标准差是方差的正平方根。
使用示例
查询和分析语句
* | SELECT vector_std_dev(array[1, -3, 8])
或
* | SELECT vector_std_dev('[1, -3, 8]')
返回结果
向量均值为2,结果为
(12+52+62=62/3)0.5=20.670.5=4.54
。
vector_add函数
vector_add函数用于计算两个向量的相加结果。
使用示例
查询和分析语句
* | SELECT vector_add(array[1, 2, 3, 4], array[2, 3, 1, 1.5])
或
* | SELECT vector_add("[1, 2, 3, 4]", "[2, 3, 1, 1.5]")
返回结果
[3.0,5.0,4.0,5.5]
vector_subtract函数
vector_subtract函数用于计算两个向量相减的结果。
使用示例
查询和分析语句
* | SELECT vector_subtract(array[1, 2, 3, 4], array[2, 3, 1, 1.5])
或
* | SELECT vector_subtract(array[1, 2, 3, 4], array[2, 3, 1, 1.5])
返回结果
[-1.0,-1.0,2.0,2.5]
vector_scale函数
vector_scale函数用于计算向量缩放的结果。
使用示例
查询和分析语句
* | SELECT vector_scale(array[1, 2, 3, 4], 5)
或
* | SELECT vector_scale('[1, 2, 3, 4]', 5)
返回结果
[5.0,10.0,15.0,20.0]
vector_multiply函数
vector_multiply函数用于计算两个向量对应元素相乘的结果。
使用示例
查询和分析语句
* | SELECT vector_multiply(array[1, 2, 3, 4], array[2, 3, 1, 1.5])
或
* | SELECT vector_multiply('[1, 2, 3, 4]', '[2, 3, 1, 1.5]')
返回结果
[2.0,6.0,3.0,6.0]
vector_divide函数
vector_divide函数用于计算两个向量对应元素相除的结果。
使用示例
查询和分析语句
* | SELECT vector_divide(array[1, 2, 3, 4], array[2, 3, 1, 1.5])
或
* | SELECT vector_divide('[1, 2, 3, 4]', '[2, 3, 1, 1.5]')
返回结果
[0.5,0.6666666666666666,3.0,2.6666666666666667]
vector_add_value函数
vector_add_value函数用于给向量的每一个元素都加上一个常数。
使用示例
查询和分析语句
* | SELECT vector_add_value(array[1, 2, 3, 4], 2.0)
或
* | SELECT vector_add_value('[1, 2, 3, 4]', 2.0)
返回结果
[3.0,4.0,5.0,6.0]
vector_fill_nan函数
vector_fill_nan函数用于对向量中出现的缺失值进行填充。向量中的元素如果为NaN
、null
、Inf
或者-Inf
,则被认为是缺失值。
参数fill_option
支持多种配置,包括:
指定值(value):
'value=0'
(0可以换成其他具体的数值)。均值(mean)
中位数(median)
最小值(min)
最大值(max)
使用示例
查询和分析语句
示例中
value=4
代替null
。* | SELECT vector_fill_nan('[1, null, 3, 4]', 'value=4')
或
示例中用数组的最大值(max)代替
null
。* | SELECT vector_fill_nan('[1, null, 3, 4]', 'max')
返回结果
[1.0,4.0,3.0,4.0]