文本、語音、映像、視頻都能夠以向量的形式儲存在向量資料庫中,方便使用者快速搜尋和查詢。Log Service支援向量計算函數,本文介紹向量計算函數的基本文法和樣本。
向量計算函數列表
以下函數中使用的向量元素,可以用特定格式的字串來描述,字串是用"[]"或者"{}"包起來的一組數字,數字之間用逗號分隔開。
函數名稱 | 文法 | 說明 | 傳回值類型 |
| 計算兩個向量之間的餘弦相似性。 餘弦相似性的取值範圍是[-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]