series_cosine_similarity_fl()
计算两个数值向量的余弦相似度。
函数 series_cosine_similarity_fl()
是一个用户定义的函数 (UDF),它以包含两个动态数值数组的表达式作为输入,并计算这两个数组的余弦相似度。
注意
请使用本机函数 series_cosine_similarity() 而不是本文档中所述的函数。 本机函数提供相同的功能,并且在性能和可伸缩性方面更好。 本文档仅供参考。
语法
series_cosine_similarity_fl(
vec1,
vec2,
[ vec1_size [,
vec2_size ]])
详细了解语法约定。
参数
客户 | 类型 | 必需 | 说明 |
---|---|---|---|
vec1 | dynamic |
✔️ | 数值的数组。 |
vec2 | dynamic |
✔️ | 一个数值数组,其长度与 vec1 相同。 |
vec1_size | real |
vec1 的大小。 这相当于向量与自身的点积的平方根。 | |
vec2_size | real |
vec2 的大小。 |
函数定义
可以通过将函数的代码嵌入为查询定义的函数,或将其创建为数据库中的存储函数来定义函数,如下所示:
使用以下 let 语句定义函数。 不需要任何权限。
let series_cosine_similarity_fl=(vec1:dynamic, vec2:dynamic, vec1_size:real=double(null), vec2_size:real=double(null))
{
let dp = series_dot_product(vec1, vec2);
let v1l = iff(isnull(vec1_size), sqrt(series_dot_product(vec1, vec1)), vec1_size);
let v2l = iff(isnull(vec2_size), sqrt(series_dot_product(vec2, vec2)), vec2_size);
dp/(v1l*v2l)
};
// Write your query to use the function here.
示例
若要使用查询定义的函数,请在嵌入的函数定义后调用它。
let series_cosine_similarity_fl=(vec1:dynamic, vec2:dynamic, vec1_size:real=double(null), vec2_size:real=double(null))
{
let dp = series_dot_product(vec1, vec2);
let v1l = iff(isnull(vec1_size), sqrt(series_dot_product(vec1, vec1)), vec1_size);
let v2l = iff(isnull(vec2_size), sqrt(series_dot_product(vec2, vec2)), vec2_size);
dp/(v1l*v2l)
};
let s1=pack_array(0, 1);
let s2=pack_array(sqrt(2), sqrt(2));
print angle=acos(series_cosine_similarity_fl(s1, s2))/(2*pi())*360
输出
角度 |
---|
45 |