series_cosine_similarity_fl()

适用于:✅Azure 数据资源管理器Azure MonitorMicrosoft Sentinel

计算两个数值向量的余弦相似度。

函数 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() 的工作示例,请参阅示例

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