In Python, welche ist schneller?numpy.max oder max? Welcher ist schneller?
numpy.max(), numpy.min()
oder
max(), min()
Meine Liste/Array-Länge variiert von 2 bis 600. Welches sollte ich einige Laufzeit verwenden zu retten?
In Python, welche ist schneller?numpy.max oder max? Welcher ist schneller?
numpy.max(), numpy.min()
oder
max(), min()
Meine Liste/Array-Länge variiert von 2 bis 600. Welches sollte ich einige Laufzeit verwenden zu retten?
Nun aus meiner Timings folgt, wenn Sie bereits numpy Array a
Sie a.max
verwenden sollten (die Quelle sagt es das gleiche wie np.max
wenn a.max
verfügbar ist). Aber wenn Sie eine eingebaute Liste haben, dann dauert die meiste Zeit umwandeln es in np.darray => das ist, warum max
ist besser in Ihrem Timings.
In essense: Wenn np.ndarray
dann a.max
, wenn list
und keine Notwendigkeit für die ganze Maschinerie der np.ndarray
dann Standard max
.
Es ist wahrscheinlich am besten, wenn Sie etwas wie das Python timeit module verwenden, um es selbst zu testen. Auf diese Weise können Sie Ihre eigenen Daten in Ihrer eigenen Umgebung testen, anstatt sich auf Dritte mit verschiedenen Testdaten und Umgebungen zu verlassen, die nicht unbedingt für Sie repräsentativ sind.
Ich habe versucht, dass auf einer zufälligen Liste von 600 Gleitkommazahlen. || np.max() + np.min() -> 1.093 ms || max() + min() -> 0,092 ms – Froyo
numpy.min
und numpy.max
haben etwas andere Semantik (und Call Signaturen) zu den Builtins, so sollte die Wahl nicht mit Geschwindigkeit zu tun haben. Verwenden Sie die numpy-Versionen, wenn Sie in der Lage sein müssen, mehrdimensionale Daten zu verarbeiten. Wenn Sie nur Python-Listen oder andere Dinge verwenden, die Dimensionalität nicht kennen, verwenden Sie die Builtins.
Ich war auch daran interessiert und testete die drei Varianten mit perfplot (ein kleines Projekt von mir). Ergebnis: Sie gehen nicht falsch mit a.max()
.
Code, um das Grundstück zu reproduzieren:
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)'
)
Sie sollten auf jeden Fall testen und für Ihr spezielles Szenario erfahren, aber mein erster Instinkt ist, dass es davon abhängen würde, ob Ihr Iterables ist " vanilla "python iterables oder numpy iterables. – jedwards
Wenn die Daten in einer ** "Liste" ** sind, würde ich Vanille 'max' verwenden. Wenn sie in einem numply ** 'Array' ** sind, würde ich' numpy.max' verwenden. Konvertieren einer Liste in ein numpy Array ist eine ziemlich teure Operation –