Alle Herausforderungen
Einfach 0 gelöst 0% Erfolgsquote

Kosinus-Ähnlichkeit

Miss die Ähnlichkeit zweier Vektoren über den Winkel zwischen ihnen, wie Suchmaschinen es mit Embeddings tun.

Das lernst du

  • Ähnlichkeit über den Winkel messen
  • Skalarprodukte und Vektornormen berechnen
  • Verstehen, wie semantische Suche Texte vergleicht

Problem

Die Kosinus-Ähnlichkeit vergleicht die Richtung zweier Vektoren und ignoriert ihre Länge. Die semantische Suche nutzt sie, um Texte mit ähnlichen Embeddings zu finden:

cos(a, b) = (a · b) / (|a| × |b|), wobei |a| = √(a₁² + a₂² + … + aₙ²)

Das Ergebnis ist 1 bei gleicher Richtung, 0 bei senkrechten Vektoren und -1 bei entgegengesetzter Richtung. Besteht einer der Vektoren nur aus Nullen, gib 0 zurück.

Implementiere cosine_similarity(a, b).

Eingabe

a, b: Zwei Zahlenlisten gleicher Länge.

Ausgabe

Gib die Kosinus-Ähnlichkeit als Dezimalzahl zurück.

Einschränkungen

1 ≤ Länge ≤ 1.000

-1.000 ≤ jeder Wert ≤ 1.000

Beispiele

Beispiel 1
Eingabe:
a = [1.0, 0.0]
b = [0.0, 1.0]

Erwartete Ausgabe:
expected = 0.0
Eingabe:
std::vector<double> a = {1.0, 0.0};
std::vector<double> b = {0.0, 1.0};

Erwartete Ausgabe:
double expected = 0.0;
Eingabe:
double[] a = new double[] {1.0, 0.0};
double[] b = new double[] {0.0, 1.0};

Erwartete Ausgabe:
double expected = 0.0;

Erläuterung

Das Skalarprodukt ist 0, also stehen die Vektoren senkrecht aufeinander und die Ähnlichkeit ist 0.

Beispiel 2
Eingabe:
a = [1.0, 2.0, 3.0]
b = [2.0, 4.0, 6.0]

Erwartete Ausgabe:
expected = 1.0
Eingabe:
std::vector<double> a = {1.0, 2.0, 3.0};
std::vector<double> b = {2.0, 4.0, 6.0};

Erwartete Ausgabe:
double expected = 1.0;
Eingabe:
double[] a = new double[] {1.0, 2.0, 3.0};
double[] b = new double[] {2.0, 4.0, 6.0};

Erwartete Ausgabe:
double expected = 1.0;

Erläuterung

b ist a mal 2: gleiche Richtung, also ist die Ähnlichkeit 1, obwohl die Längen verschieden sind.

Referenzen

Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.

Von anderen lernen

Community-Lösungen

Noch keine veröffentlichten Lösungen. Löse die Aufgabe und teile als Erster eine Lösung.