series_cosine_similarity_fl()
Vypočítá kosinus podobnost dvou číselných vektorů.
Funkce series_cosine_similarity_fl()
je uživatelem definovaná funkce (UDF), která jako vstup přebírá výraz obsahující dvě dynamická číselná pole a vypočítá jejich kosinusovou podobnost.
Poznámka:
Místo funkce popsané v tomto dokumentu použijte nativní funkci series_cosine_similarity( ). Nativní funkce poskytuje stejné funkce a je lepší pro výkon a škálovatelnost. Tento dokument je k dispozici pouze pro referenční účely.
Syntaxe
series_cosine_similarity_fl(
vec1,
vec2,
[ vec1_size [,
vec2_size ]])
Přečtěte si další informace o konvencích syntaxe.
Parametry
Název | Type | Požadováno | Popis |
---|---|---|---|
vec1 | dynamic |
✔️ | Matice číselných hodnot. |
vec2 | dynamic |
✔️ | Matice číselných hodnot, která má stejnou délku jako vec1. |
vec1_size | real |
Velikost vec1. To je ekvivalentem druhou odmocninu tečky vektoru se samotným. | |
vec2_size | real |
Velikost vec2. |
Definice funkce
Funkci můžete definovat vložením jejího kódu jako funkce definovanou dotazem nebo vytvořením jako uložené funkce v databázi následujícím způsobem:
Definujte funkci pomocí následujícího příkazu let. Nejsou vyžadována žádná oprávnění.
Důležité
Příkaz let nemůže běžet samostatně. Musí následovat příkaz tabulkového výrazu. Pokud chcete spustit funkční příklad, podívejte se na příkladseries_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.
Příklad
Pokud chcete použít funkci definovanou dotazem, vyvoláte ji po definici vložené funkce.
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
Výstup
úhel |
---|
45 |
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro