Vergleich der Matrixtranspositionsgeschwindigkeit durch Python

1. Hintergrund

Ich wollte ein zweidimensionales Array (Translokationsmatrix) ** mit Zeilen und Spalten erhalten, die von einem zweidimensionalen Array basierend auf dem Python-Standardlistentyp ** ausgetauscht wurden, weil mein Code extrem langsam war **, was die Transpositionsmatrixmethode ist Ich habe mich gefragt, ob es das schnellste ist, also habe ich es verglichen.

Matrix-Wikipedia übertragen

Da der Autor ein Anfänger mit weniger als einem halben Jahr Programmiererfahrung ist, würde ich es begrüßen, wenn Sie auf Fehler oder Verbesserungsmethoden hinweisen könnten. [** Zum Geschwindigkeitsvergleichsergebnis **](# 5-Geschwindigkeitsvergleichsergebnis)

2. Umwelt

name version
Python 3.7.4
Jupyter Notebook 6.0.1
NumPy 1.16.5
Pandas 0.25.1

3. Bedingungen

--Input ist ein zweidimensionales Array mit dem Standardlistentyp Python

3-1. Translokationsmatrix

Der Name der zu transponierenden Matrix lautet "in_matrix", und diesmal wird eine 100 × 100-Matrix erzeugt.

Matrix zum Umsetzen


#Matrix zum Verschieben_Erstellen einer Matrix
n = 100
m = 100
in_matrix = [[i for i in range(n)] for j in range(m)]

3-2. Messung der Bearbeitungszeit

Dies geschieht mit dem% timeit des Jupyter Notebook (IPython). Built-in magic commands — %timeit
Die Anzahl der Schleifen beträgt "-n 10000" und die Wiederholung "-r 10".

Messung der Bearbeitungszeit


#Messung der Bearbeitungszeit
%timeit -n 10000 -r 10 turn_matrix(in_matrix)

4. Betrachtete Translokationsmethode

--Übertragung durch Doppelschleife [[turn_matrix1 ()](# 6-1-Übertragung durch Doppelschleife 1), [turn_matrix2 ()](# 6-2-Übertragung durch Doppelschleife 2)] --Übertragung durch eingebaute Funktion zip () [[turn_matrix3 ()](# 6-3-Übertragung durch eingebaute Funktion zip), [turn_matrix4 ()](# 6-4-Übertragung durch eingebaute Funktion zip list Einschlussnotation) )]] --Übertragung durch NumPy [[turn_matrix5 ()](Übertragung durch # 6-5-numpy)] --Übertragung durch Pandas [[turn_matrix6 ()](Übertragung durch # 6-6-Pandas)]

Von den oben genannten basiert die Translokation mit den integrierten Funktionen zip (), NumPy und Pandas auf Folgendem. Zeilen und Spalten des zweidimensionalen Arrays vom Typ Python-Liste austauschen (Translokation) | note.nkmk.me

5. Geschwindigkeitsvergleichsergebnis

Im Vergleich der Translokationsgeschwindigkeiten ist [Übertragung durch NumPy](Übertragung durch # 6-5-numpy) ** überwiegend schneller (1,67 µs) **, gefolgt von [Übertragung durch Pandas](Übertragung durch # 6-6-Pandas). ) (86,3 µs), [Funktion zip () + Listeneinschlussnotation](# 6-4-Übertragung durch integrierte Funktionsziplisteneinschlussnotation) (99,4 µs).

No. def description Translokationsgeschwindigkeit
1 turn_matrix1() Doppelschleife 1 777 µs ± 43.6 µs
2 turn_matrix2() Doppelschleife 2 654 µs ± 83 µs
3 turn_matrix3() Funktionsreißverschluss() 105 µs ± 4.22 µs
4 turn_matrix4() Funktionsreißverschluss()+Listeneinschlussnotation 99.4 µs ± 1.36 µs
5 turn_matrix5() NumPy 1.67 µs ± 38.9 ns
6 turn_matrix6() Pandas 86.3 µs ± 4.54 µs

sp.png

In [Übertragung durch NumPy](Übertragung durch # 6-5-numpy) und [Übertragung durch Pandas](Übertragung durch # 6-6-pandas) beträgt die Konvertierung vom Listentyp in numpy.array jedoch ** 486 µs . , Die Konvertierung in pandas.DataFrame dauert also ** 6,19 ms ** Die Zeit einschließlich der Konvertierung vom Listentyp beträgt [Übertragung durch NumPy](Übertragung durch # 6-5-numpy) ( 487,67 µs ), [Übertragung durch Pandas](Übertragung durch # 6-6-Pandas) Es wurde ( 6,2763 ms **). Wenn es sich bei der angegebenen Matrix um einen Listentyp handelt, beträgt die Gesamtverarbeitungszeit zum Erhalten der transponierten Matrix aus der Listentypmatrix ** [Funktions-Zip () + Listeneinschlussnotation](# 6-4 integrierte Funktions-Zip). (Übertragung durch Listeneinschlussnotation) (99,4 µs) ** wurde als am schnellsten angesehen.

No. def description Translokationsgeschwindigkeit np.Array oder pd.Konvertierung in DataFrame
1 turn_matrix1() Doppelschleife 1 777 µs ± 43.6 µs
2 turn_matrix2() Doppelschleife 2 654 µs ± 83 µs
3 turn_matrix3() Funktionsreißverschluss() 105 µs ± 4.22 µs
4 turn_matrix4() Funktionsreißverschluss()+Listeneinschlussnotation 99.4 µs ± 1.36 µs
5 turn_matrix5() NumPy 1.67 µs ± 38.9 ns 486 µs ± 10.1 µs
6 turn_matrix6() Pandas 86.3 µs ± 4.54 µs 6.19 ms ± 43.1 µs

sp2.png

6. Translokationsfunktion

6-1. Inversion durch Doppelschleife 1

Funktionsname: turn_matrix1 () Translokation durch Doppelschleife ohne Referenz erstellt. Übergeben Sie die Anzahl der Zeilen x und die Anzahl der Spalten y des Arguments "Matrix" an die for-Schleife und extrahieren Sie aus dem Argument "Matrix" die Anzahl der Zeilen als Anzahl der Spalten und die Anzahl der Spalten als Anzahl der Zeilen.

Inversion durch Doppelschleife 1


#Matrix zum Verschieben_Erstellen einer Matrix
n = 100
m = 100
in_matrix = [[i for i in range(n)] for j in range(m)]

#Translokationsfunktion drehen_matrix1()
def turn_matrix1(matrix):
    x = len(matrix)
    y = len(matrix[0])    
    turned = []
    for i in range(y):
        tmp = []
        for j in range(x):
            tmp.append(matrix[j][i])
        turned.append(tmp)
    return turned

#Messung der Bearbeitungszeit
%timeit -r 10 -n 10000 turn_matrix1(in_matrix)

** Ausführungsergebnis ** 777 µs ± 43.6 µs per loop (mean ± std. dev. of 10 runs, 10000 loops each)

6-2 Inversion durch Doppelschleife 2

Funktionsname: turn_matrix2 () In [6-1. Translokation 1 durch Doppelschleife](# 6-1-Übertragung 1 durch Doppelschleife) wurden die Anzahl der Zeilen x und die Anzahl der Spalten y des Arguments "Matrix" erfasst, aber das Argument "Matrix" Nehmen Sie von, Zeile für Zeile mit einer for-Schleife heraus, erstellen Sie eine "tmp" -Zeile mit demselben Spaltennummernwert und fügen Sie sie zu "gedreht" hinzu.

Inversion durch Doppelschleife 2


#Matrix zum Verschieben_Erstellen einer Matrix
n = 100
m = 100
in_matrix = [[i for i in range(n)] for j in range(m)]

#Translokationsfunktion drehen_matrix2()
def turn_matrix2(matrix):
    y = len(matrix[0])
    turned = []
    for i in range(y):
        tmp = []
        for j in matrix:
            tmp.append(j[i])
        turned.append(tmp)
    return turned

#Messung der Bearbeitungszeit
%timeit -r 10 -n 10000 turn_matrix2(in_matrix)

** Ausführungsergebnis ** 654 µs ± 83 µs per loop (mean ± std. dev. of 10 runs, 10000 loops each)

6-3. Translokation durch eingebaute Funktion zip ()

Funktionsname: turn_matrix3 ()

Eingebauter Funktionsreißverschluss()Umzug durch


#Matrix zum Verschieben_Erstellen einer Matrix
n = 100
m = 100
in_matrix = [[i for i in range(n)] for j in range(m)]

#Translokationsfunktion drehen_matrix3(matrix)
def turn_matrix3(matrix):
    turned = []
    for i in zip(*matrix):
        turned.append(list(i))
    return turned

#Messung der Bearbeitungszeit
%timeit -r 10 -n 10000 turn_matrix3(in_matrix)

** Ausführungsergebnis ** 105 µs ± 4.22 µs per loop (mean ± std. dev. of 10 runs, 10000 loops each)

6-4. Integrierte Funktion zip () + Translokation nach Listeneinschlussnotation

Funktionsname: turn_matrix4 ()

Eingebauter Funktionsreißverschluss()+Inversion durch Listeneinschlussnotation


#Matrix zum Verschieben_Erstellen einer Matrix
n = 100
m = 100
in_matrix = [[i for i in range(n)] for j in range(m)]

#Translokationsfunktion drehen_matrix4()
def turn_matrix4(matrix):
    return [list(x) for x in zip(*matrix)]

#Messung der Bearbeitungszeit
%timeit -r 10 -n 10000 turn_matrix3(in_matrix)

** Ausführungsergebnis ** 99.4 µs ± 1.36 µs per loop (mean ± std. dev. of 10 runs, 10000 loops each)

Listeneinschlussnotation


turned_matrix = [list(x) for x in zip(*in_matrix)] 

Zeilen und Spalten des zweidimensionalen Arrays vom Typ Python-Liste austauschen (Translokation) | note.nkmk.me

6-5. Translokation durch NumPy

Funktionsname: turn_matrix5 ()

Translokation durch NumPy


import numpy as np

#Matrix zum Verschieben_Erstellen einer Matrix
n = 100
m = 100
in_matrix = [[i for i in range(n)] for j in range(m)]

#in_numpy aus der Matrix.Array numpy_in_Erstellen einer Matrix
%timeit numpy_in_matrix = np.array(in_matrix)

#Translokationsfunktion drehen_matrix5()
def turn_matrix5(matrix):
    return matrix.T

#Messung der Bearbeitungszeit
%timeit -r 10 -n 10000 turn_matrix5(numpy_in_matrix)

** Ausführungsergebnis ** Konvertierung von in_matrix nach numpy.array 486 µs ± 10.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

Translokation 1.67 µs ± 38.9 ns per loop (mean ± std. dev. of 10 runs, 10000 loops each)

Translokation durch NumPy


import numpy as np

turned_matrix = np.array(in_matrix).T

Zeilen und Spalten des zweidimensionalen Arrays vom Typ Python-Liste austauschen (Translokation) | note.nkmk.me

6-6. Umzug durch Pandas

Funktionsname: turn_matrix6 ()

Translokation durch Pandas


import pandas as pd

#Matrix zum Verschieben_Erstellen einer Matrix
n = 100
m = 100
in_matrix = [[i for i in range(n)] for j in range(m)]

#in_Pandas aus der Matrix.DataFrame-Pandas_in_Erstellen einer Matrix
%timeit pandas_in_matrix = pd.DataFrame(in_matrix)

#Translokationsfunktion drehen_matrix6()
def turn_matrix5(matrix):
    return matrix.T

#Messung der Bearbeitungszeit
%timeit -r 10 -n 10000 turn_matrix5(pandas_in_matrix)

** Ausführungsergebnis ** -Konvertierung von in_matrix nach pandas.DataFrame 6.19 ms ± 43.1 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

· Transfer 86.3 µs ± 4.54 µs per loop (mean ± std. dev. of 10 runs, 10000 loops each)

Translokation durch Pandas


import pandas as pd

turned_matrix = pd.DataFrame(in_matrix).T

Zeilen und Spalten des zweidimensionalen Arrays vom Typ Python-Liste austauschen (Translokation) | note.nkmk.me

Recommended Posts

Vergleich der Matrixtranspositionsgeschwindigkeit durch Python
Leistungsvergleich des Gesichtsdetektors mit Python + OpenCV
Vergleich von 4 Arten von Python-Webframeworks
Vergleich von CoffeeScript mit JavaScript-, Python- und Ruby-Grammatik
Erste Schritte mit Python Grundlagen von Python
Lebensspiel mit Python! (Conways Spiel des Lebens)
Implementierung der Dyxtra-Methode durch Python
Geschwindigkeitsvergleich der Python-XML-Perspektive
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Grundlegendes Studium von OpenCV mit Python
Geschwindigkeitsvergleich der Volltextverarbeitung von Wiktionary mit F # und Python
Grundlagen der binärisierten Bildverarbeitung durch Python
[Beispiel für eine Python-Verbesserung] Python mit Codecademy lernen
Führen Sie das Python-Skript mit TS-220 cron aus
Vergleich japanischer Konvertierungsmodule in Python3
Überprüfen Sie die Existenz der Datei mit Python
Verstopft mit Python-Update der GCP-Konsole ①
Einfache Einführung der Spracherkennung mit Python
Python-String-Vergleich / benutze 'Liste' und 'In' anstelle von '==' und 'oder'
[EDA] Einführung von Sweetviz (Vergleich mit + Pandas-Profiling)
Trump-Klasse in Python (mit Vergleich)
Python lernen! Vergleich mit Java (Grundfunktion)
UnicodeEncodeError hat Probleme mit der Standardausgabe von Python3
Erstellen Sie eine Excel-Datei mit Python + Ähnlichkeitsmatrix
1. Mit Python 1-3 gelernte Statistiken. Berechnung verschiedener Statistiken (Statistiken)
Zeichnen mit Matrix-Reinventor von Python Image Processing-
Empfehlung von Altair! Datenvisualisierung mit Python
Vergleich von Python Serverless Frameworks-Zappa mit Chalice
Faltungsfilterung durch Matrix-Reinventor der Python-Bildverarbeitung-
[AtCoder] Lösen Sie ein Problem von ABC101 ~ 169 mit Python
Ich habe Hunderte Millionen SQLite mit Python ausprobiert
FizzBuzz in Python3
Scraping mit Python
Zusammenfassung des Bibliotheksvergleichs zum Generieren von PDF mit Python
Bereiten Sie die Ausführungsumgebung von Python3 mit Docker vor
Erster Python 3 ~ Erster Vergleich ~
Statistik mit Python
Automatischer Betrieb von Chrome mit Python + Selen + Pandas
[Python] Grenzachse des 3D-Graphen mit Matplotlib
2016 Todai Mathematik mit Python gelöst
Scraping mit Python
Python mit Go
[Hinweis] Exportieren Sie das HTML der Site mit Python.
Verstopft mit Python-Update der GCP-Konsole ② (Lösung)
[Python3] Geschwindigkeitsvergleich usw. über den Entzug von numpy.ndarray
[Python] 90 Grad Rechtsdrehung, 90 Grad Linksdrehung, 180 Grad Drehung der Matrix [AtCoder]
Berechnen Sie die Gesamtzahl der Kombinationen mit Python
Twilio mit Python
In Python integrieren
Verwenden Sie mit pyenv mehrere Versionen der Python-Umgebung
Überprüfen Sie das Datum der Flaggenpflicht mit Python
Spielen Sie mit 2016-Python
Löse A ~ D des Yuki-Codierers 247 mit Python
AES256 mit Python
Getestet mit Python
Python-Grundlagen ①
1. Mit Python 1-2 gelernte Statistiken. Berechnung verschiedener Statistiken (Numpy)