[PYTHON] Covector pour penser en fonction

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.

  1. Produit interne à penser par estimation
  2. Penser avec les fonctions Covector ← Cet article
  3. Matrice pour penser avec fonction
  4. Dualité en fonction
  5. Pensée Perceptron dans Covector

Cet article contient des articles connexes.

produit intérieur

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

Covector

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}

une fonction

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.

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

Mauvais exemple

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

Calculs multiples

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

Un à plusieurs

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

Plusieurs à un

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}

Plusieurs à plusieurs

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.

référence

J'ai utilisé l'exemple de Wikipedia avec quelques modifications.

L'idée de covector vient de l'espace vectoriel dual.

Recommended Posts

Covector pour penser en fonction
Dualité en fonction
Enregistrer automatiquement les arguments de fonction dans argparse en Python
Comment se moquer d'une fonction publique dans Pytest
Exécuter des fonctions en parallèle
Fonction générateur même en JavaScript
Pensée Perceptron dans Covector
Fonction pour renvoyer plusieurs colonnes à des colonnes uniques dans DataFrame
Comment définir Decorator et Decomaker avec une seule fonction
[Route vers Python intermédiaire] Définir la fonction __getattr__ dans la classe
Créer une fonction en Python
Pour vider stdout en Python
Utiliser la fonction de rappel en Python
Fonction ntile (décile) en python
Connectez-vous au site Web en Python
Implémenter la fonction de minuterie dans pygame
Comment appeler une fonction
Fonction pratique pour ajouter des colonnes n'importe où dans Pandas DataFrame
Comment échantillonner à partir de n'importe quelle fonction de densité de probabilité en Python
Pour renvoyer char * dans une fonction de rappel à l'aide de ctypes en Python
Modélisation de fonctions non linéaires en Python
Dessiner la fonction Yin en python
Parler avec Python [synthèse vocale]
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
Fonction immédiate (lie) en python
Créons une fonction pour maintenir Button dans Tkinter
Comment développer en Python
Publier sur Slack en Python
J'ai écrit une fonction pour charger le script d'extension Git en Python
Différence de vitesse d'exécution en fonction de la façon d'écrire la fonction Cython
Réfléchissez sérieusement au langage à utiliser dans l'enseignement de la programmation et l'enseignement de la programmation.
Créez une fonction pour obtenir le contenu de la base de données dans Go
Précautions lors de l'attribution de valeurs par défaut aux arguments dans les définitions de fonctions Python
Comment utiliser la fonction de rendu définie dans .mako (.html) directement dans mako
Programmation pour combattre dans le monde ~ 5-1
Programmation pour combattre dans le monde ~ 5-5,5-6
Programmer pour combattre dans le monde 5-3
[Python] Comment faire PCA avec Python
Comment gérer une session dans SQLAlchemy
Comment utiliser la fonction zip
Fonction pour convertir des colonnes Excel en nombres
Implémenter la fonction power.prop.test de R en python
Créer une fonction d'authentification utilisateur dans Airflow
Avertissement de tri dans la fonction pd.concat
Ce que les débutants pensent de la programmation en 2016
Définition du type d'argument de fonction en python
Notation inclusive dans l'argument de la fonction Python
Convertir Markdown en PDF en Python
Comment utiliser les classes dans Theano
Comment écrire sobrement avec des pandas
Comment collecter des images en Python
Mock in python - Comment utiliser mox
Erreur liée à memcached dans django
Étapes pour installer Ubuntu sur VirtualBox
Implémentation de la fonction de connexion dans Django
Comment mettre à jour Spyder dans Anaconda