Sto generando una matrice grande (100x100, chiamiamola X) con numeri casuali, con numpy.matrix() in modo da avere un numpy.ndarray.Differenze delle funzioni di trasposizione in python
mi sono chiesto se ci sono differenze tra le due operazioni:
- numpy.transpose (X)
- XT
Ho misurato il tempo di ogni operazione in un ciclo con un intervallo di 1000 e sembra che XT sia significativamente più veloce di numpy.transpose (X)
Aggiunto Benchmark:
Per una matrice 100x100 ho ottenuto i seguenti risultati con XT e numpy.tranpose (X)
In un loop di 10.000 intervalli:
- 7421/10.000: XT più veloce
- 1256/10,000: numpy.transpose (X) più veloce
- 1323/10,000: Stesso tempo di calcolo o la differenza troppo piccola per determinare
Aggiunta la codice qui sotto
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)
migliori saluti whir
Interessante. Non capisco le unità del tuo benchmark. Potresti aggiornare per dire? Sul mio sistema, sembra che X.T sia 20-30% più veloce di X.transpose() (usando% timeit su 100x100 o 10000x10000 array). – user20160
Inoltre, 'np.transpose (X)' è il 120-130% più lento di 'x.T' sul mio sistema. Forse c'è una piccola quantità di overhead extra per la funzione call ('x.transpose()' è una funzione mentre 'x.T' non lo è). 'np.transpose()' è una funzione python con un po 'di codice wrapping, quindi c'è un overhead extra lì. – user20160