[PYTHON] Covector, um in Funktion zu denken

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.

  1. Internes Produkt, das nach Schätzung zu denken ist
  2. Denken mit Funktionen Covector ← Dieser Artikel
  3. Matrix zum Denken mit Funktion
  4. Dualität in der Funktion
  5. Perceptron Thinking in Covector

Dieser Artikel enthält verwandte Artikel.

Innenprodukt

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.

Covector

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}

Funktion

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.

>>> 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.

Schlechtes Beispiel

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

Mehrere Berechnungen

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.

Eins zu viele

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])

Viele zu einem

Ü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}

Viel zu viel

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.

Referenz

Ich habe das Wikipedia-Beispiel mit einigen Änderungen verwendet.

Die Idee des Covektors kommt aus dem dualen Vektorraum.

Recommended Posts

Covector, um in Funktion zu denken
Dualität in der Funktion
Registrieren Sie Funktionsargumente automatisch in argparse in Python
Wie man eine öffentliche Funktion in Pytest verspottet
Funktionen parallel ausführen
Generatorfunktion auch in JavaScript
Perceptron denkt im Covector
Funktion zum Zurückgeben mehrerer Spalten an einzelne Spalten in DataFrame
So definieren Sie Decorator und Decomaker mit einer Funktion
[Road to Intermediate Python] Definieren Sie die Funktion __getattr__ in der Klasse
Erstellen Sie eine Funktion in Python
So löschen Sie stdout in Python
Verwenden Sie die Rückruffunktion in Python
ntile (Dezil) -Funktion in Python
Melden Sie sich auf der Website in Python an
Implementiere die Timer-Funktion im Pygame
So rufen Sie eine Funktion auf
Praktische Funktion zum Hinzufügen von Spalten an einer beliebigen Stelle in Pandas DataFrame
Wie man aus einer Wahrscheinlichkeitsdichtefunktion in Python tastet
So geben Sie char * in einer Rückruffunktion mit ctypes in Python zurück
Nichtlineare Funktionsmodellierung in Python
Zeichne die Yin-Funktion in Python
Sprechen mit Python [Text zu Sprache]
Ich habe versucht, die Mail-Sendefunktion in Python zu implementieren
Sofortige Funktion (Lüge) in Python
Erstellen wir eine Funktion, um die Schaltfläche in Tkinter gedrückt zu halten
Wie man in Python entwickelt
Post an Slack in Python
Ich habe eine Funktion zum Laden des Git-Erweiterungsskripts in Python geschrieben
Unterschied in der Ausführungsgeschwindigkeit abhängig vom Schreiben der Cython-Funktion
Überlegen Sie ernsthaft, welche Sprache in der Programmierausbildung und in der Programmierausbildung verwendet werden soll.
Erstellen Sie eine Funktion, um den Inhalt der Datenbank in Go abzurufen
Vorsichtsmaßnahmen beim Festlegen von Standardwerten für Argumente in Python-Funktionsdefinitionen
Verwendung der in .mako (.html) direkt in mako definierten Renderfunktion
Programmieren, um in der Welt zu kämpfen ~ 5-1
Programmierung, um in der Welt zu kämpfen ~ 5-5,5-6
Programmieren, um in der Welt zu kämpfen 5-3
[Python] Wie man PCA mit Python macht
Umgang mit Sitzungen in SQLAlchemy
Verwendung der Zip-Funktion
Funktion zum Konvertieren von Excel-Spalten in Zahlen
Implementieren Sie die Funktion power.prop.test von R in Python
Erstellen Sie eine Benutzerauthentifizierungsfunktion in Airflow
Sortierwarnung in der Funktion pd.concat
Was Anfänger über das Programmieren im Jahr 2016 denken
Definition des Funktionsargumenttyps in Python
Inklusive Notation im Argument der Python-Funktion
Konvertieren Sie Markdown in Python in PDF
Verwendung von Klassen in Theano
Wie man nüchtern mit Pandas schreibt
So sammeln Sie Bilder in Python
Mock in Python-Wie man Mox benutzt
Fehler im Zusammenhang mit Memcached in Django
Schritte zum Installieren von Ubuntu auf VirtualBox
Implementierung der Login-Funktion in Django
So aktualisieren Sie Spyder in Anaconda