Partilhar via


series_cosine_similarity_fl()

Aplica-se a: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

Calcula a similaridade de cosseno de dois vetores numéricos.

A função series_cosine_similarity_fl() é uma função definida pelo usuário (UDF) que recebe uma expressão contendo duas matrizes numéricas dinâmicas como entrada e calcula sua similaridade de cosseno.

Observação

Use a função nativa series_cosine_similarity() em vez da função descrita neste documento. A função nativa fornece a mesma funcionalidade e é melhor para desempenho e escalabilidade. Este documento é fornecido apenas para fins de referência.

Sintaxe

series_cosine_similarity_fl(vec1, vec2, [ vec1_size [, vec2_size ]])

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Digitar Obrigatória Descrição
vec1 dynamic ✔️ Uma matriz de valores numéricos.
vec2 dynamic ✔️ Uma matriz de valores numéricos com o mesmo comprimento de vec1.
vec1_size real O tamanho de vec1. Isso é equivalente à raiz quadrada do produto escalar do vetor consigo mesmo.
vec2_size real O tamanho de vec2.

Definição de função

Você pode definir a função inserindo seu código como uma função definida por consulta ou criando-a como uma função armazenada em seu banco de dados, da seguinte maneira:

Defina a função usando a instrução let a seguir. Nenhuma permissão é necessária.

Importante

Uma instrução let não pode ser executada sozinha. Ele deve ser seguido por uma instrução de expressão tabular. Para executar um exemplo funcional de series_cosine_similarity_fl(), consulte Exemplo.

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.

Exemplo

Para usar uma função definida por consulta, invoque-a após a definição da função inserida.

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

Saída

angle
45