series_cosine_similarity_fl()
Applies to: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel
Calculates the cosine similarity of two numerical vectors.
The function series_cosine_similarity_fl()
is a user-defined function (UDF) that takes an expression containing two dynamic numerical arrays as input and calculates their cosine similarity.
Note
Use the native function series_cosine_similarity() instead of the function described in this document. The native function provides the same functionality and is better for performance and scalability. This document is provided for reference purposes only.
Syntax
series_cosine_similarity_fl(
vec1,
vec2,
[ vec1_size [,
vec2_size ]])
Learn more about syntax conventions.
Parameters
Name | Type | Required | Description |
---|---|---|---|
vec1 | dynamic |
✔️ | An array of numeric values. |
vec2 | dynamic |
✔️ | An array of numeric values that is the same length as vec1. |
vec1_size | real |
The size of vec1. This is equivalent to the square root of the dot product of the vector with itself. | |
vec2_size | real |
The size of vec2. |
Function definition
You can define the function by either embedding its code as a query-defined function, or creating it as a stored function in your database, as follows:
Define the function using the following let statement. No permissions are required.
Important
A let statement can't run on its own. It must be followed by a tabular expression statement. To run a working example of series_cosine_similarity_fl()
, see Example.
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.
Example
To use a query-defined function, invoke it after the embedded function definition.
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
Output
angle |
---|
45 |