Udostępnij za pośrednictwem


series_cosine_similarity_fl()

Oblicza podobieństwo cosinusowe dwóch wektorów liczbowych.

Funkcja series_cosine_similarity_fl() jest funkcją zdefiniowaną przez użytkownika (UDF), która przyjmuje wyrażenie zawierające dwie dynamiczne tablice liczbowe jako dane wejściowe i oblicza podobieństwo cosinusu.

Uwaga

Użyj funkcji natywnej series_cosine_similarity() zamiast funkcji opisanej w tym dokumencie. Funkcja natywna zapewnia tę samą funkcjonalność i jest lepsza pod kątem wydajności i skalowalności. Ten dokument jest udostępniany tylko do celów referencyjnych.

Składnia

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

Dowiedz się więcej o konwencjach składniowych.

Parametry

Nazwa Typ Wymagane Opis
vec1 dynamic ✔️ Tablica wartości liczbowych.
vec2 dynamic ✔️ Tablica wartości liczbowych o tej samej długości co vec1.
vec1_size real Rozmiar vec1. Jest to odpowiednik pierwiastek kwadratowy produktu kropki wektora z samym sobą.
vec2_size real Rozmiar vec2.

Definicja funkcji

Funkcję można zdefiniować, osadzając jej kod jako funkcję zdefiniowaną przez zapytanie lub tworząc ją jako funkcję przechowywaną w bazie danych w następujący sposób:

Zdefiniuj funkcję przy użyciu następującej instrukcji let. Nie są wymagane żadne uprawnienia.

Ważne

Instrukcja let nie może być uruchamiana samodzielnie. Po nim musi znajdować się instrukcja wyrażenia tabelarycznego. Aby uruchomić działający przykład series_cosine_similarity_fl()polecenia , zobacz Przykład.

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.

Przykład

Aby użyć funkcji zdefiniowanej przez zapytanie, wywołaj ją po definicji funkcji osadzonej.

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

Dane wyjściowe

kąt
45