Wie ähnlich sind zwei Hörgewohnheiten?
Das Skalarprodukt multipliziert zwei Vektoren Komponente für Komponente und addiert die Ergebnisse. Daraus entsteht die Kosinus-Ähnlichkeit, ein Maß dafür, wie sehr zwei Vektoren in dieselbe Richtung zeigen.
Ein Musikdienst vergleicht damit, wie viele Stunden drei Studierende pro Woche Pop, Rock, Klassik und Jazz hören. So findet er Menschen mit ähnlichem Geschmack.
Am Ende dieser Lektion
Notiz
Ich kann mit dem Skalarprodukt und der Kosinus-Ähnlichkeit sagen, wie sehr zwei Vektoren übereinstimmen.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Skalarprodukt | die Summe der Produkte gleicher Positionen zweier Vektoren |
| Winkel | wie weit zwei Vektoren auseinanderzeigen |
| Kosinus-Ähnlichkeit | das Skalarprodukt geteilt durch beide Längen |
| orthogonal | senkrecht zueinander, Skalarprodukt 0 |
| Länge | die Wurzel aus dem Skalarprodukt mit sich selbst |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Das Skalarprodukt multipliziert und addiert
Für das Skalarprodukt zweier Vektoren multiplizieren Sie gleiche Positionen und addieren alle Produkte. Das Ergebnis ist eine einzelne Zahl, kein Vektor.
Hören zwei Menschen beide viel Pop, wird dieser Summand groß. Hört einer nichts, was der andere hört, ist der Summand 0.
Beispiel: Anna und Ben
| Genre | Anna in Stunden | Ben in Stunden | Produkt |
|---|---|---|---|
| Pop | 5 | 4 | 20 |
| Rock | 3 | 0 | 0 |
| Klassik | 0 | 0 | 0 |
| Jazz | 1 | 1 | 1 |
| Skalarprodukt | 21 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Das Skalarprodukt in Python
anna = [5, 3, 0, 1] # Stunden: Pop, Rock, Klassik, Jazz
ben = [4, 0, 0, 1]
summe = 0
for n in range(len(anna)):
summe = summe + anna[n] * ben[n]
print("Skalarprodukt:", summe)
# Ändern Sie die 0 bei Ben (Rock) auf 3.
# Wie ändert sich das Produkt? Rechnen Sie vorher im Kopf.
Dasselbe Produkt mit NumPy
docker exec jupyter python3 -c "import numpy as np; print(np.dot([5, 3, 0, 1], [4, 0, 0, 1]))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Vorzeichen des Produkts zeigt den Winkel
Das Skalarprodukt ist gleich Länge mal Länge mal dem Kosinus des Winkels zwischen den Vektoren. Der Kosinus ist 1 bei gleicher Richtung, 0 bei einem rechten Winkel und minus 1 bei Gegenrichtung.
Ein Produkt von 0 heißt also: orthogonal, die Vektoren stehen senkrecht.
Beispiel: drei Lagen zweier Pfeile
| Vektoren | Skalarprodukt | Winkel | Lage |
|---|---|---|---|
| [1, 0] und [2, 0] | 2 | 0 Grad | gleiche Richtung |
| [1, 0] und [0, 1] | 0 | 90 Grad | senkrecht |
| [1, 2] und [-1, -2] | -5 | 180 Grad | Gegenrichtung |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Zwei senkrechte Vektoren
docker exec jupyter python3 -c "import numpy as np; print(np.dot([1, 0], [0, 1]), np.dot([1, 2], [-1, -2]))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele denken, ein großes Skalarprodukt heiße große Ähnlichkeit. Das stimmt nicht. Lange Vektoren geben große Produkte, auch bei ganz anderer Richtung. Teilen Sie erst durch beide Längen, dann zählt nur die Richtung.
Die Kosinus-Ähnlichkeit vergleicht nur die Richtung
Die Kosinus-Ähnlichkeit ist das Skalarprodukt geteilt durch das Produkt der beiden Längen. Sie liegt zwischen minus 1 und 1. Bei Zählwerten ohne Minus liegt sie zwischen 0 und 1.
Hört jemand das Zehnfache an Stunden bei gleichem Mix, bleibt die Ähnlichkeit gleich. Die Länge ist herausgekürzt.
Beispiel: wem ähnelt Anna mehr?
| Paar | Skalarprodukt | Längen | Ähnlichkeit |
|---|---|---|---|
| Anna und Ben | 21 | 5,916 und 4,123 | 0,861 |
| Anna und Cem | 13 | 5,916 und 5,196 | 0,423 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die Ähnlichkeit zweier Menschen berechnen
anna = [5, 3, 0, 1]
cem = [1, 1, 0, 5]
punkt = 0
quadrat_a = 0
quadrat_c = 0
for n in range(4):
punkt = punkt + anna[n] * cem[n]
quadrat_a = quadrat_a + anna[n] ** 2
quadrat_c = quadrat_c + cem[n] ** 2
aehnlich = punkt / (quadrat_a ** 0.5 * quadrat_c ** 0.5)
print("Ähnlichkeit:", round(aehnlich, 3))
# Setzen Sie cem auf [10, 10, 0, 50]. Die Ähnlichkeit bleibt gleich.
Die Ähnlichkeit von Anna und Ben
docker exec jupyter python3 -c "import numpy as np; a = np.array([5, 3, 0, 1]); b = np.array([4, 0, 0, 1]); print(round(a @ b / (np.linalg.norm(a) * np.linalg.norm(b)), 3))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.