Share via


series_cosine_similarity_fl()

Calcola la somiglianza del cosno di due vettori numerici.

La funzione è una funzione series_cosine_similarity_fl()definita dall'utente che accetta un'espressione contenente due matrici numeriche dinamiche come input e calcola la somiglianza del cosno.

Nota

Usare la funzione nativa series_cosine_similarity() anziché la funzione descritta in questo documento. La funzione nativa offre la stessa funzionalità ed è migliore per prestazioni e scalabilità. Questo documento viene fornito solo a scopo di riferimento.

Sintassi

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

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Tipo Obbligatoria Descrizione
vec1 dynamic ✔️ Matrice di valori numerici.
vec2 dynamic ✔️ Matrice di valori numerici che corrisponde alla stessa lunghezza di vec1.
vec1_size real Dimensione di vec1. Equivale alla radice quadrata del prodotto punto del vettore con se stesso.
vec2_size real Dimensione di vec2.

Definizione di funzione

È possibile definire la funzione incorporando il codice come funzione definita da query o creandola come funzione archiviata nel database, come segue:

Definire la funzione usando l'istruzione let seguente. Non sono necessarie autorizzazioni.

Importante

Un'istruzione let non può essere eseguita autonomamente. Deve essere seguito da un'istruzione espressione tabulare. Per eseguire un esempio funzionante di series_cosine_similarity_fl(), vedere Esempio.

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.

Esempio

Per usare una funzione definita da query, richiamarla dopo la definizione di funzione incorporata.

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