[PYTHON] Ich habe ein Demo-Programm zur linearen Transformation einer Matrix geschrieben

zunaechst

Die geheime Notiz des Mathematikmädchens "Was die Prozession zeichnet" Demonstration der linearen Transformation von "Lisa" in Kapitel 4 Transformation Ich bin mit Python gegangen

Betriebsumgebung

Python3

Implementierungsbeispiel und Ergebnis

Nachfolgend sind sie in der Reihenfolge der Beschreibung in diesem Handbuch aufgeführt.

Punkte anzeigen

Wird an Punkt (2, 1) in der Grafik angezeigt

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

Punkte verschieben

Matrixpunkte (2, 1)

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

Transformiere linear mit, um zum Punkt (4, 2) zu gelangen.

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

Verschieben Sie mehrere Punkte

Matrix aus mehreren Punkten

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

Lineare Umwandlung mit

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}

Bei linearer Umrechnung mit Screen Shot 2020-04-28 at 13.15.13.png

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

Bei linearer Umrechnung mit

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

Bei linearer Umrechnung mit Screen Shot 2020-04-28 at 13.20.23.png

Synthese linearer Transformationen

Zahlenmatrix umgeben von (0, 0), (1, 0), (1, 1), (0, 1)

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

Nach der Konvertierung mit

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

Konvertieren mit

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

Wenn sich die Umrechnungsreihenfolge wie in der folgenden Abbildung gezeigt unterscheidet, unterscheidet sich auch die Abbildung. Sie können sehen, dass ABx = BAx nicht wie eine normale Formel gilt

Screen Shot 2020-04-28 at 18.31.12.png

Recommended Posts

Ich habe ein Demo-Programm zur linearen Transformation einer Matrix geschrieben
Ich habe schnell ein Programm geschrieben, um DI mit Python zu lernen
Praktisch für die Ausbildung von Neulingen? Ich habe einen Telnet-Übungsserver geschrieben
Ich suchte mit Deep Learning nach einer ähnlichen Karte von Hearthstone
Ich habe viele Dateien für die RDP-Verbindung mit Python erstellt
Ich berührte PyAutoIt für einen Moment
Die Geschichte des Exportierens eines Programms
Latein lernen zum Schreiben eines lateinischen Satzanalyseprogramms (Teil 1)
AtCoder-Autor Ich habe ein Skript geschrieben, das Wettbewerbe für jeden Autor zusammenfasst
Ich habe einen Korpusleser geschrieben, der die Ergebnisse der MeCab-Analyse liest
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich habe ein Dash-Docset für Holoviews erstellt
Ich habe ein Pay-Management-Programm in Python erstellt!
Eindrücke von der Verwendung von Flask für einen Monat
Ich habe einen Unit-Test für verschiedene Sprachen geschrieben
Ich habe den Code für Gibbs Sampling geschrieben
Ich habe einen Benchmark für die h5py-Komprimierung erstellt
Ich habe versucht, ein Auto in 3D zu erkennen
Ich habe eine Bibliothek für versicherungsmathematische Versicherungen erstellt
Ich habe ein Diagramm wie R glmnet in Python für die spärliche Modellierung mit Lasso geschrieben
[Basic Information Engineer Examination] Ich habe einen linearen Suchalgorithmus in Python geschrieben.
Ich habe das TensorFlow-Tutorial (MNIST für Anfänger) zur Cloud9-Klassifizierung handgeschriebener Bilder ausprobiert.
Ich habe eine Animation geschrieben, bei der das lineare System mit tödlich schmutzigem Code schrumpft
Ich möchte dem Anfang einer WAV-Datei 1 Sekunde lang Stille hinzufügen