Ich erzeuge eine große Matrix (100x100, nennen wir es X) mit Zufallszahlen, mit numpy.matrix(), so dass ich eine numpy.darray habe.Unterschiede der Transponierungsfunktionen in Python
Ich habe mich gefragt, ob es einen Unterschied zwischen den beiden Operationen sind:
- numpy.transpose (X)
- XT
I die Zeit gemessen wurden jede Operation in einer Schleife mit einer Reichweite von 1000 und es scheint, dass XT ist deutlich schneller als numpy.transpose (X)
Added Benchmarks:
Für eine 100x100-Matrix Ich habe die folgenden Ergebnisse mit XT und numpy.tranpose (X)
In einer 10.000-Bereichsschleife:
- 7421/10.000: XT schnellste
- 1256/10,000: numpy.transpose (X) schnellste
- 1323/10,000: Der gleiche Rechenzeit oder die Differenz zu klein, um zu bestimmen
Hinzugefügt wurde die Code unten
import numpy as np
import time
np_transpose_count = 0
T_transpose_count = 0
equal_count = 0
for i in range(10000):
Se = np.random.rand(100,100)
tic1 =time.clock()
ST_T = Se.T
toc1=time.clock()
tic2 =time.clock()
ST_np = np.transpose(Se)
toc2=time.clock()
if (toc1-tic1) < (toc2-tic2):
T_transpose_count+=1
elif (toc1-tic1) > (toc2-tic2):
np_transpose_count+=1
else:
equal_count+=1
print(T_transpose_count, np_transpose_count, equal_count)
Mit freundlichen Grüßen Whir
Interessant. Ich verstehe die Einheiten Ihres Benchmarks nicht. Können Sie aktualisieren, um zu sagen? Auf meinem System sieht es so aus, als ob X.T 20-30% schneller ist als X.transpose() (mit% timeit auf 100x100 oder 10000x10000 Array). – user20160
Auch "np.transpose (X)" ist 120-130% langsamer als "x.T" auf meinem System. Vielleicht gibt es eine kleine Menge zusätzlichen Aufwands für den Funktionsaufruf ('x.transpose()' ist eine Funktion, während 'x.T' nicht ist). 'np.transpose()' ist eine Python-Funktion mit etwas Wrapping-Code, daher gibt es dort zusätzlichen Overhead. – user20160