向量计算函数

文本、语音、图像、视频都能够以向量的形式保存在向量数据库中,方便用户快速搜索和查询。日志服务支持向量计算函数,本文介绍向量计算函数的基本语法和示例。

向量计算函数列表

重要

以下函数中使用的向量元素,可以用特定格式的字符串来描述,字符串是用"[]"或者"{}"包起来的一组数字,数字之间用逗号分隔开。

函数名称

语法

说明

返回值类型

cosine_similarity函数

  • cosine_similarity(array(double) vector1, array(double) vector2)

  • cosine_similarity(varchar vector1, varchar vector2)

计算两个向量之间的余弦相似度。

余弦相似度的取值范围是[-1, 1]:

  • 当余弦相似度为1时,表示两个向量方向完全相同。

  • 当余弦相似度为-1时,表示两个向量方向完全相反。

  • 当余弦相似度为0时,表示两个向量在几何上是正交的,即它们是垂直的。

double

inner_product或dot_product函数

  • inner_product(array(double) vector1, array(double) vector2)

  • inner_product(varchar vector1, varchar vector2)

  • dot_product(array(double) vector1, array(double) vector2)

  • dot_product(varchar vector1, varchar vector2)

计算两个向量的内积(点积)。

double

l2_distance函数或euclidean_distance函数

  • euclidean_distance(array(double) vector1, array(double) vector2)

  • euclidean_distance(varchar vector1, varchar vector2)

  • l2_distance(array(double) vector1, array(double) vector2)

  • l2_distance(varchar vector1, varchar vector2)

计算两个向量的欧式距离。

double

vector_norm函数

  • vector_norm(array(double) vector1)

  • vector_norm(array(double) vector1, double p)

  • vector_norm(varchar vector1)

  • vector_norm(varchar vector1, double p)

计算一个向量的范数。范数相当于向量的长度。

double

vector_sum函数

  • vector_sum(array(double) vector1)

  • vector_sum(varchar vector1)

计算一个向量的所有元素之和。

double

vector_mean函数

  • vector_mean(array(double) vector1)

  • vector_mean(varchar vector1)

计算一个向量的平均值。

double

vector_variance函数

  • vector_variance(array(double) vector1)

  • vector_variance(varchar vector1)

计算一个向量的方差。方差代表向量元素偏离均值的平均波动幅度的平方和,描述了该向量中元素分布的离散程度。

double

vector_std_dev函数

  • vector_std_dev(array(double) vector1)

  • vector_std_dev(varchar vector1)

计算一个向量的标准差,标准差是方差的正平方根。方差描述了数据点围绕均值的波动大小。方差越大,表示数据点越分散;方差越小,表示数据点越集中。

double

vector_add函数

  • vector_add(array(double) vector1, array(double) vector2)

  • vector_add(varchar vector1, varchar vector2)

计算两个向量相加的结果。

结合向量加减法和向量缩放,可以做任意线性变换。

array(double)

vector_subtract函数

  • vector_subtract(array(double) vector1, array(double) vector2)

  • vector_subtract(varchar vector1, varchar vector2)

计算两个向量相减的结果。

结合向量的加减法和向量的缩放,可以做任意线性变换。

array(double)

vector_scale函数

  • vector_scale(array(double) vector1, double alpha)

  • vector_scale(varchar vector1, double alpha)

结合向量的加减法和向量的缩放,可以做任何线性变换。

array(double)

vector_multiply函数

  • vector_multiply(array(double) vector1, array(double) vector2)

  • vector_multiply(varchar vector1, varchar vector2)

计算两个向量对应元素相乘的结果,返回结果向量。

array(double)

vector_divide函数

  • vector_divide(array(double) vector1, array(double) vector2)

  • vector_divide(varchar vector1, varchar vector2)

计算两个向量对应元素相除的结果,返回结果向量。

array(double)

vector_add_value函数

  • vector_add_value(array(double) vector1, double value)

  • vector_add_value(varchar vector1, double value)

向量的每一个元素都加上一个常数,返回结果向量。

array(double)

vector_fill_nan函数

vector_fill_nan(varchar vector1, varchar fill_option)

对向量中出现的缺失值进行填充,向量中的元素如果为NaNnullInf或者-Inf,则被认为是缺失值。

参数fill_option支持多种配置,包括'avg''mean' 'median''min''max'以及'value=0'(0可以换成其他具体的数值)。

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函数用于对向量中出现的缺失值进行填充。向量中的元素如果为NaNnullInf或者-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]