Erklären Sie das Konzept, dass eine Funktion mit dem inneren Produkt von Vektoren implementiert werden kann. [Dual Vector Space](https://ja.wikipedia.org/wiki/%E5%8F%8C%E5%AF%BE%E3%83%99%E3%82%AF%E3%83%88%E3 Der Zweck besteht darin, das Bild von% 83% AB% E7% A9% BA% E9% 96% 93) zu vermitteln. Python wird als Programmiersprache zum Vergleich verwendet, und das Ergebnis von NumPy wird an die Berechnung des inneren Produkts angehängt.
Dies ist eine Reihe von Artikeln.
Dieser Artikel enthält verwandte Artikel.
Das innere Produkt von $ \ vec {a} \ cdot \ vec {b} $ wird als die Aktion von $ \ vec {a} \ cdot $ von links auf $ \ vec {b} $ angesehen. Es kann als Produkt ausgedrückt werden, indem $ \ vec {a} $ transponiert wird.
\begin{align}
\underbrace{\vec{a}\cdot}_{Aktion}\vec{b}
&=\underbrace{\left(\begin{matrix}a_1 \\ a_2 \\ a_3\end{matrix}\right)\cdot}_{Aktion}
\left(\begin{matrix}b_1 \\ b_2 \\ b_3\end{matrix}\right) \\
&=\underbrace{\left(\begin{matrix}a_1 \\ a_2 \\ a_3\end{matrix}\right)^{\top}}_{Translokation}
\left(\begin{matrix}b_1 \\ b_2 \\ b_3\end{matrix}\right) \\
&=\underbrace{\left(\begin{matrix}a_1 & a_2 & a_3\end{matrix}\right)}_{Horizontaler Vektor}
\underbrace{\left(\begin{matrix}b_1 \\ b_2 \\ b_3\end{matrix}\right)}_{Vertikaler Vektor} \\
&=\underbrace{a_1b_1+a_2b_2+a_3b_3}_{Innenprodukt}
\end{align}
Es ist gut zu wissen, dass "horizontaler Vektor mal vertikaler Vektor" ein weiterer Ausdruck des inneren Produkts von Vektoren ist. Aus diesem Muster geht auch hervor, dass die Richtung des Produkts der Matrix "horizontal → vertikal" ist.
Der horizontale Vektor, der links vom vertikalen Vektor hängt, heißt covector. Ich werde. Der vertikale Vektor rechts vom Covektor wird einfach als Vektor bezeichnet. Basierend auf dem vertikalen Vektor ist dies der Name des transponierten horizontalen Vektors, wobei das Präfix "co-" die Dualität darstellt. (Wie ** co ** für die Unterschrift ** co ** für die Unterschrift)
\underbrace{\left(\begin{matrix}a_1 & a_2 & a_3\end{matrix}\right)}_{Covector}
\underbrace{\left(\begin{matrix}b_1 \\ b_2 \\ b_3\end{matrix}\right)}_{Vektor}
\underbrace{\left(\begin{matrix}a_1 & a_2 & a_3\end{matrix}\right)}_{1-Format}
\underbrace{\left(\begin{matrix}b_1 \\ b_2 \\ b_3\end{matrix}\right)}_{1-Vektor}
Der Covector (1-Form) hat eine besondere Bedeutung. Einfach ausgedrückt funktioniert die Translokation durch Konvertieren eines Vektors (einer Matrix) in eine Funktion.
\underbrace{\left(\begin{matrix}a_1 & a_2 & a_3\end{matrix}\right)}_{Funktion (Implementierung)}
\underbrace{\left(\begin{matrix}b_1 \\ b_2 \\ b_3\end{matrix}\right)}_{Streit}
=\underbrace{a_1b_1+a_2b_2+a_3b_3}_{Rückgabewert}
Obwohl Covektoren als Funktionen betrachtet werden können, sind die Funktionen, die implementiert werden können, auf diejenigen beschränkt, die als inneres Produkt ausgedrückt werden können. Hier sind einige Beispiele.
getY
Gibt das zweite der drei Argumente zurück.
>>> def getY(x, y, z):
... return y
...
>>> getY(1,2,3)
2
Mit Covector umsetzen. Beginnen Sie mit Großbuchstaben zur Unterscheidung.
>>> from numpy import *
>>> GetY = [0, 1, 0]
>>> dot(GetY, [1, 2, 3])
2
GetY
\left(\begin{matrix}1 \\ 2 \\ 3\end{matrix}\right)
=\left(\begin{matrix}0 & 1 & 0\end{matrix}\right)
\left(\begin{matrix}1 \\ 2 \\ 3\end{matrix}\right)
=2
Das gleiche Ergebnis wurde durch das innere Produkt mit dem Covektor erhalten.
Sie können auch "GetX" und "GetZ" implementieren.
>>> GetX = [1, 0, 0]
>>> GetZ = [0, 0, 1]
>>> dot(GetX, [1, 2, 3])
1
>>> dot(GetZ, [1, 2, 3])
3
sum
Gibt die Summe der drei Argumente zurück.
>>> def sum(x, y, z):
... return x + y + z
...
>>> sum(1, 2, 3)
6
Mit Covector umsetzen.
>>> Sum = [1, 1, 1]
>>> dot(Sum, [1, 2, 3])
6
Sum
\left(\begin{matrix}1 \\ 2 \\ 3\end{matrix}\right)
=\left(\begin{matrix}1 & 1 & 1\end{matrix}\right)
\left(\begin{matrix}1 \\ 2 \\ 3\end{matrix}\right)
=6
average
Gibt den Durchschnittswert der drei Argumente zurück.
>>> def average(x, y, z):
... return (x + y + z) / 3
...
>>> average(1, 2, 3)
2.0
Mit Covector umsetzen.
Array
ist für die Komponententeilung angegeben.>>> Average = array([1, 1, 1]) / 3
>>> dot(Average, [1, 2, 3])
2.0
Average
\left(\begin{matrix}1 \\ 2 \\ 3\end{matrix}\right)
=\frac{1}{3}
\left(\begin{matrix}1 & 1 & 1\end{matrix}\right)
\left(\begin{matrix}1 \\ 2 \\ 3\end{matrix}\right)
=2
gray
Konvertiert RGB-Werte in Graustufen.
>>> def gray(r, g, b):
... return r * 0.299 + g * 0.587 + b * 0.114
...
>>> gray(64, 128, 192)
116.16
Mit Covector umsetzen.
>>> Gray = [0.299, 0.587, 0.114]
>>> dot(Gray, [64, 128, 192])
116.16
Gray
\left(\begin{matrix}64 \\ 128 \\ 192\end{matrix}\right)
=\left(\begin{matrix}0.299 & 0.587 & 0.114\end{matrix}\right)
\left(\begin{matrix}64 \\ 128 \\ 192\end{matrix}\right)
=116.16
Das Angeben und Addieren des Verhältnisses ist die ursprüngliche Verwendung des inneren Produkts.
Das innere Produkt kann nur durch lineare Operation (konstantes Vielfaches und Summe) ausgedrückt werden.
Es gibt viele Dinge, die Sie nicht tun können, aber zum Beispiel können die folgenden Funktionen nicht mit Covektoren implementiert werden.
>>> def product(x, y, z):
... return x * y * z
...
>>> product(2, 3, 4)
24
Obwohl es sich um eine Covector-Funktion mit begrenzter Ausdruckskraft handelt, hat sie den Vorteil, dass mehrere Berechnungen kombiniert werden können. Lassen Sie uns das bestätigen.
Überprüfen Sie dies, indem Sie nach dem Verhältnis "Funktion: Argument" klassifizieren.
Es ist üblich, verschiedene Argumente zur Berechnung an eine Funktion zu übergeben.
>>> sum(1,2,3)
6
>>> sum(4,5,6)
15
Sie können die Listeneinschlussnotation verwenden, um mehrere solcher Berechnungen zu einer zu kombinieren.
>>> [sum(x,y,z) for x,y,z in [(1,2,3),(4,5,6)]]
[6, 15]
Bei der Berechnung mit covector können Sie sofort berechnen, indem Sie eine Matrix übergeben, in der der Vektor des Arguments nebeneinander angeordnet ist.
>>> dot(Sum,[[1,4],[2,5],[3,6]])
array([ 6, 15])
\begin{align}
Sum\left(\begin{array}{c|c}1 & 4 \\ 2 & 5 \\ 3 & 6\end{array}\right)
&=\left(\begin{matrix}
Sum\left(\begin{matrix}1 \\ 2 \\ 3\end{matrix}\right) &
Sum\left(\begin{matrix}4 \\ 5 \\ 6\end{matrix}\right)
\end{matrix}\right) \\
&=\left(\begin{matrix}6 & 15\end{matrix}\right)
\end{align}
Erst nach dieser Methode kommt die Freude an der Matrixberechnung zum Vorschein. Die Beschreibung in NumPy ist jedoch verwirrend, da die beiden Argumentmengen verwechselt sind. Es ist besser, mit Inversion zu schreiben.
>>> dot(Sum,array([[1,2,3],[4,5,6]]).T)
array([ 6, 15])
Überlegen Sie nun, dasselbe Argument an mehrere Funktionen zu übergeben.
>>> sum(1,2,3)
6
>>> average(1,2,3)
2.0
Dies kann auch in Listeneinschlussnotation geschrieben werden.
>>> [(sum(x,y,z),average(x,y,z)) for x,y,z in [(1,2,3)]]
[(6, 2.0)]
Argumente können geteilt werden, indem die Covektoren vertikal angeordnet werden.
>>> dot([Sum,Average],[1,2,3])
array([ 6., 2.])
\begin{align}
\left(\begin{matrix}Sum \\ Average\end{matrix}\right)
\left(\begin{matrix}1 \\ 2 \\ 3\end{matrix}\right)
&=\left(\begin{array}{r}
Sum \left(\begin{matrix}1 \\ 2 \\ 3\end{matrix}\right) \\
Average\left(\begin{matrix}1 \\ 2 \\ 3\end{matrix}\right)
\end{array}\right) \\
&=\left(\begin{matrix}6 \\ 2\end{matrix}\right)
\end{align}
Wie zu erwarten, können Sie alle Kombinationen gleichzeitig berechnen, indem Sie mehrere Funktions- und Argumentpaare verwenden.
Solides Schreiben
>>> sum(1,2,3)
6
>>> average(1,2,3)
2.0
>>> sum(4,5,6)
15
>>> average(4,5,6)
5.0
Listeneinschlussnotation
>>> [(sum(x,y,z),average(x,y,z)) for x,y,z in [(1,2,3),(4,5,6)]]
[(6, 2.0), (15, 5.0)]
Der Covector und das Argument sind vertikal angeordnet und das Argument wird transponiert.
>>> dot([Sum,Average],array([[1,2,3],[4,5,6]]).T)
array([[ 6., 15.],
[ 2., 5.]])
\begin{align}
\left(\begin{matrix}Sum \\ Average\end{matrix}\right)
\left(\begin{array}{c|c}1 & 4 \\ 2 & 5 \\ 3 & 6\end{array}\right)
&=\left(\begin{array}{rr}
Sum \left(\begin{matrix}1 \\ 2 \\ 3\end{matrix}\right) &
Sum \left(\begin{matrix}4 \\ 5 \\ 6\end{matrix}\right) \\
Average\left(\begin{matrix}1 \\ 2 \\ 3\end{matrix}\right) &
Average\left(\begin{matrix}4 \\ 5 \\ 6\end{matrix}\right)
\end{array}\right) \\
&=\left(\begin{matrix}6 & 15 \\ 2 & 5\end{matrix}\right)
\end{align}
Covectors und Dual Spaces mögen wie unrealistische abstrakte Ideen erscheinen, aber wenn Sie ihnen diese Bedeutung geben, erhalten Sie möglicherweise ein konkretes Bild.
Ich habe das Wikipedia-Beispiel mit einigen Änderungen verwendet.
Die Idee des Covektors kommt aus dem dualen Vektorraum.
Recommended Posts