Expliquez le concept selon lequel une fonction peut être implémentée en utilisant le produit interne des vecteurs. [Espace vectoriel double](https://ja.wikipedia.org/wiki/%E5%8F%8C%E5%AF%BE%E3%83%99%E3%82%AF%E3%83%88%E3 Le but est de véhiculer l'image de% 83% AB% E7% A9% BA% E9% 96% 93). Python est utilisé comme langage de programmation pour la comparaison, et le résultat de NumPy est attaché au calcul du produit interne.
Ceci est une série d'articles.
Cet article contient des articles connexes.
Le produit interne de $ \ vec {a} \ cdot \ vec {b} $ est considéré comme l'action de $ \ vec {a} \ cdot $ depuis la gauche sur $ \ vec {b} $. Il peut être exprimé comme un produit en transposant $ \ vec {a} $.
\begin{align}
\underbrace{\vec{a}\cdot}_{action}\vec{b}
&=\underbrace{\left(\begin{matrix}a_1 \\ a_2 \\ a_3\end{matrix}\right)\cdot}_{action}
\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}}_{Translocation}
\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)}_{Vecteur horizontal}
\underbrace{\left(\begin{matrix}b_1 \\ b_2 \\ b_3\end{matrix}\right)}_{Vecteur vertical} \\
&=\underbrace{a_1b_1+a_2b_2+a_3b_3}_{produit intérieur}
\end{align}
Il est bon de savoir que «vecteur horizontal multiplié par vecteur vertical» est une autre expression du produit interne des vecteurs. Ce modèle dérive également du fait que la direction du produit de la matrice est "horizontal → vertical".
Le vecteur horizontal qui pend de la gauche au vecteur vertical est appelé covector. Je vais. Le vecteur vertical à droite du covecteur est simplement appelé le vecteur. Basé sur le vecteur vertical, c'est le nom du vecteur horizontal transposé avec le préfixe "co-" représentant la dualité. (Identique à ** co ** pour signature ** co ** pour signature)
\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)}_{vecteur}
\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-vecteur}
Le covecteur (forme 1) a une signification particulière. En termes simples, la translocation fonctionne en convertissant un vecteur (matrice) en une fonction.
\underbrace{\left(\begin{matrix}a_1 & a_2 & a_3\end{matrix}\right)}_{Fonction (mise en œuvre)}
\underbrace{\left(\begin{matrix}b_1 \\ b_2 \\ b_3\end{matrix}\right)}_{argument}
=\underbrace{a_1b_1+a_2b_2+a_3b_3}_{Valeur de retour}
Même si les covecteurs peuvent être considérés comme des fonctions, les fonctions qui peuvent être implémentées sont limitées à celles qui peuvent être exprimées comme un produit interne. Voici quelques exemples.
getY
Renvoie le deuxième des trois arguments.
>>> def getY(x, y, z):
... return y
...
>>> getY(1,2,3)
2
Implémentez avec covector. Commencez par des majuscules pour faire la distinction.
sera omis.
dot le gère correctement sans spécifier ʻarray
.>>> 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
Le même résultat a été obtenu par le produit intérieur avec le covector.
Vous pouvez également implémenter GetX
et GetZ
.
>>> GetX = [1, 0, 0]
>>> GetZ = [0, 0, 1]
>>> dot(GetX, [1, 2, 3])
1
>>> dot(GetZ, [1, 2, 3])
3
sum
Renvoie la somme des trois arguments.
>>> def sum(x, y, z):
... return x + y + z
...
>>> sum(1, 2, 3)
6
Implémentez avec covector.
>>> 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
Renvoie la valeur moyenne des trois arguments.
>>> def average(x, y, z):
... return (x + y + z) / 3
...
>>> average(1, 2, 3)
2.0
Implémentez avec covector.
>>> 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
Convertit les valeurs RVB en échelle de gris.
>>> def gray(r, g, b):
... return r * 0.299 + g * 0.587 + b * 0.114
...
>>> gray(64, 128, 192)
116.16
Implémentez avec covector.
>>> 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
Spécifier le rapport et les ajouter ensemble est l'utilisation originale du produit intérieur.
Le produit interne ne peut être exprimé que par opération linéaire (multiple constant et somme).
Il y a beaucoup de choses que vous ne pouvez pas faire, mais par exemple, les fonctions suivantes ne peuvent pas être implémentées avec des covecteurs.
>>> def product(x, y, z):
... return x * y * z
...
>>> product(2, 3, 4)
24
Bien qu'il s'agisse d'une fonction basée sur des covecteurs à expressivité limitée, elle présente l'avantage de pouvoir combiner plusieurs calculs. Confirmons cela.
Vérifiez en classant par le rapport "fonction: argument".
Il est courant de passer différents arguments à une fonction pour le calcul.
>>> sum(1,2,3)
6
>>> sum(4,5,6)
15
Vous pouvez utiliser la notation d'inclusion de liste pour combiner plusieurs de ces calculs en un seul.
>>> [sum(x,y,z) for x,y,z in [(1,2,3),(4,5,6)]]
[6, 15]
Dans le calcul utilisant covector, vous pouvez calculer en une fois en passant une matrice dans laquelle le vecteur de l'argument est disposé côte à côte.
>>> 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}
Ce n'est qu'après avoir utilisé cette méthode que la joie du calcul matriciel sortira. Cependant, la description de NumPy prête à confusion car les deux ensembles d'arguments sont mélangés. Il vaut mieux écrire en utilisant l'inversion.
>>> dot(Sum,array([[1,2,3],[4,5,6]]).T)
array([ 6, 15])
Pensez maintenant à passer le même argument à plusieurs fonctions.
>>> sum(1,2,3)
6
>>> average(1,2,3)
2.0
Cela peut également être écrit en notation d'inclusion de liste.
>>> [(sum(x,y,z),average(x,y,z)) for x,y,z in [(1,2,3)]]
[(6, 2.0)]
Les arguments peuvent être partagés en organisant les covecteurs verticalement.
>>> 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}
Comme vous pouvez vous y attendre, vous pouvez calculer toutes les combinaisons à la fois en utilisant plusieurs paires de fonctions et d'arguments.
Écriture solide
>>> sum(1,2,3)
6
>>> average(1,2,3)
2.0
>>> sum(4,5,6)
15
>>> average(4,5,6)
5.0
Notation d'inclusion de liste
>>> [(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)]
Le covecteur et l'argument sont disposés verticalement et l'argument est transposé.
>>> 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}
Les covecteurs et les espaces doubles peuvent sembler des idées abstraites irréalistes, mais si vous leur donnez ce sens, vous pourriez obtenir une image concrète.
J'ai utilisé l'exemple de Wikipedia avec quelques modifications.
L'idée de covector vient de l'espace vectoriel dual.
Recommended Posts