[PYTHON] J'ai écrit un programme de démonstration pour la transformation linéaire d'une matrice

en premier

Note secrète de Mathematics Girl "Ce que la procession dessine" Démonstration de la transformation linéaire effectuée par "Lisa" dans le chapitre 4 Transform Je suis allé avec Python

Environnement d'exploitation

Python3

Exemple de mise en œuvre et résultat

Ci-dessous, ils sont répertoriés dans l'ordre de description dans ce manuel.

Afficher les points

Affiché au point (2, 1) du graphique

import matplotlib.pyplot as plt
import numpy as np

p21 = np.array([2, 1])
plt.plot(p21[0], p21[1], marker='.')

plt.show()
Screen Shot 2020-04-28 at 11.27.52.png

Déplacer des points

Points de matrice (2, 1)

\begin{pmatrix}
2 & 0 \\
0 & 2 
\end{pmatrix}

Transformer linéairement avec pour passer au point (4, 2)

Screen Shot 2020-04-28 at 11.24.38.png
import matplotlib.pyplot as plt
import numpy as np

p21 = np.array([2, 1])
p21to42 = np.array([[2, 0], [0, 2]]) @ p21

fig = plt.figure()
ax = fig.add_subplot(111)
ax.annotate('', xy=p21to42,
                xytext=p21,
                arrowprops=dict(shrink=0, width=1, headwidth=8))
ax.set_xlim([0, 5])
ax.set_ylim([0, 5])

plt.plot(p21[0], p21[1], marker='.')
plt.plot(p21to42[0], p21to42[1], marker='.')

plt.show()

Déplacer plusieurs points

Matrice de plusieurs points

\begin{pmatrix}
2 & 0 \\
0 & 2 
\end{pmatrix}

Conversion linéaire avec

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111)

for x in np.linspace(-1, 1, 11):
    for y in np.linspace(-1, 1, 11):
        marker = '8'
        if x > 0 and y > 0:
            marker = '$1$'
        elif x < 0 and y > 0:
            marker = '$2$'
        elif x < 0 and y < 0:
            marker = '$3$'
        elif x > 0 and y < 0:
            marker = '$4$'

        pOrg = np.array([x, y])
        pTra = np.array([[2, 0], [0, 2]]) @ pOrg

        ax.annotate('', xy=pTra,
                        xytext=pOrg,
                        arrowprops=dict(shrink=0.1, width=1, headwidth=3))

        plt.plot(pOrg[0], pOrg[1], marker = marker)
        plt.plot(pTra[0], pTra[1], marker = marker)

ax.set_xlim([-2, 2])
ax.set_ylim([-2, 2])
plt.show()
Screen Shot 2020-04-28 at 13.07.29.png
\begin{pmatrix}
1/2 & 0 \\
0 & 1/2 
\end{pmatrix}

Lors d'une conversion linéaire avec Screen Shot 2020-04-28 at 13.15.13.png

\begin{pmatrix}
3 & 0 \\
0 & 2 
\end{pmatrix}

Lors d'une conversion linéaire avec

Screen Shot 2020-04-28 at 13.17.21.png
\begin{pmatrix}
2 & 1 \\
1 & 3 
\end{pmatrix}

Lors d'une conversion linéaire avec Screen Shot 2020-04-28 at 13.20.23.png

Synthèse des transformations linéaires

Matrice de chiffres entourée de (0, 0), (1, 0), (1, 1), (0, 1)

\begin{pmatrix}
2 & 1 \\
1 & 3 
\end{pmatrix}

Après conversion avec

\begin{pmatrix}
0 & -1 \\
1 & 0 
\end{pmatrix}

Convertir avec

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax1 = fig.add_subplot(131)
ax2 = fig.add_subplot(132)
ax3 = fig.add_subplot(133)

original = np.array([[0, 0], [0, 1], [1, 1], [1, 0], [0, 0]])
trans1 = np.array([[0, 0]])
trans2 = np.array([[0, 0]])
for ele in original:
    _ele1 = np.array([[2, 1], [1, 3]]) @ ele
    _ele2 = np.array([[0, -1], [1, 0]]) @ _ele1
    trans1 = np.vstack((trans1, np.array([_ele1])))
    trans2 = np.vstack((trans2, np.array([_ele2])))

ax1.plot(original[:,0], original[:,1], marker = ".", label='original')
ax2.plot(trans1[:,0], trans1[:,1], marker = ".", label='trans1')
ax3.plot(trans2[:,0], trans2[:,1], marker = ".", label='trans2')

ax1.legend(loc = 'upper center')
ax2.legend(loc = 'upper center')
ax3.legend(loc = 'upper center')
ax1.set_xlim([-4, 4])
ax1.set_ylim([-4, 4])
ax2.set_xlim([-4, 4])
ax2.set_ylim([-4, 4])
ax3.set_xlim([-4, 4])
ax3.set_ylim([-4, 4])
plt.show()
Screen Shot 2020-04-28 at 18.19.26.png

Si l'ordre de conversion est différent comme indiqué dans la figure ci-dessous, le chiffre sera également différent. Vous pouvez voir que ABx = BAx ne tient pas comme une formule normale

Screen Shot 2020-04-28 at 18.31.12.png

Recommended Posts

J'ai écrit un programme de démonstration pour la transformation linéaire d'une matrice
J'ai écrit rapidement un programme pour étudier la DI avec Python ①
Pratique pour former les nouveaux arrivants? J'ai écrit un serveur d'entraînement Telnet
J'ai recherché une carte similaire de Hearthstone avec Deep Learning
J'ai créé beaucoup de fichiers pour la connexion RDP avec Python
J'ai touché PyAuto pendant un moment
L'histoire de l'exportation d'un programme
Apprendre le latin dans le but d'écrire un programme d'analyse de phrases latines (partie 1)
Écrivain AtCoder J'ai écrit un script qui regroupe les concours pour chaque écrivain
J'ai écrit un lecteur de corpus qui lit les résultats de l'analyse MeCab
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai créé un docset de tableau de bord pour Holoviews
J'ai fait un programme de gestion de la paie en Python!
Impressions d'utilisation de Flask pendant un mois
J'ai écrit un test unitaire pour différentes langues
J'ai écrit le code pour l'échantillonnage Gibbs
J'ai pris un benchmark de compression h5py
J'ai essayé la détection 3D d'une voiture
J'ai fait une bibliothèque pour l'assurance actuarielle
J'ai écrit un graphe comme R glmnet en Python pour une modélisation clairsemée avec Lasso
[Examen d'ingénieur d'information de base] J'ai écrit un algorithme de recherche linéaire en Python.
J'ai essayé le tutoriel TensorFlow (MNIST pour les débutants) sur Cloud9-Classification des images manuscrites-
J'ai écrit une animation que le système linéaire rétrécit avec du code sale mortel
Je veux ajouter du silence pendant 1 seconde au début d'un fichier wav