In python, quale è più veloce?numpy.max o max? Qual è più veloce?
numpy.max(), numpy.min()
o
max(), min()
Mia lista/lunghezza della matrice varia da 2 a 600. Quale dovrei usare per risparmiare un po 'di tempo di esecuzione?
In python, quale è più veloce?numpy.max o max? Qual è più veloce?
numpy.max(), numpy.min()
o
max(), min()
Mia lista/lunghezza della matrice varia da 2 a 600. Quale dovrei usare per risparmiare un po 'di tempo di esecuzione?
Beh dai miei tempi ne consegue se si dispone già di serie NumPy a
si dovrebbe usare a.max
(la fonte dice che è lo stesso come se np.max
a.max
disponibili). Ma se hai una lista integrata allora la maggior parte delle volte richiede convertendo in np.ndarray => ecco perché max
è meglio nei tuoi tempi.
In essenza: se np.ndarray
poi a.max
, se list
e senza bisogno di tutti i macchinari di np.ndarray
quindi normale max
.
Probabilmente è meglio se si utilizza qualcosa come il Python timeit module per testarlo da solo. In questo modo puoi testare i tuoi dati nel tuo ambiente, piuttosto che affidarti a terze parti con vari dati di test e ambienti che non sono necessariamente rappresentativi dei tuoi.
L'ho provato su una lista casuale di 600 numeri in virgola mobile. || np.max() + np.min() -> 1.093 msec || max() + min() -> 0,092 msec – Froyo
numpy.min
e numpy.max
hanno semantica leggermente diversa (e le firme di chiamata) per i builtin, quindi la scelta non deve essere a che fare con la velocità. Utilizzare le versioni di numpy se è necessario essere in grado di gestire i dati multidimensionali in modo corretto. Se stai usando solo elenchi Python o altre cose che non conoscono la dimensionalità, usa i builtin.
Mi interessava anche questo e ho provato le tre varianti con perfplot (un mio piccolo progetto). Risultato: non stai sbagliando con a.max()
.
codice per riprodurre la trama:
import numpy
import perfplot
perfplot.show(
setup=lambda n: numpy.random.rand(n),
kernels=[
max,
numpy.max,
lambda a: a.max()
],
labels=['max(a)', 'numpy.max(a)', 'a.max()'],
n_range=[2**k for k in range(20)],
logx=True,
logy=True,
xlabel='len(a)'
)
Si dovrebbe prova e scoprire per lo scenario specifico, ma il mio primo istinto è che sarebbe dipenderà dal fatto che i tuoi iterabili sono " vanilla "iterables python o iterables numpy. – jedwards
Se i dati sono in un '' elenco' **, userei vanilla 'max'. Se sono in un numpy ** 'array' ** userei' numpy.max'. Convertire una lista in una matrice numpy è un'operazione piuttosto costosa. –