Effiziente Numpy-Array-Zuordnungsstrategien
Wenn es um die Zuordnung von Funktionen über ein Numpy-Array geht, ist Leistungseffizienz entscheidend. Es stellt sich eine grundlegende Frage: „Was ist der effizienteste Ansatz für Zuordnungsvorgänge?“
Ineffizienter Ansatz: Python-Listenverständnis
Das in der Frage bereitgestellte Beispiel verwendet eine Liste Verständnis:
squares = np.array([squarer(xi) for xi in x])
Obwohl dieser Ansatz funktioniert, weist er aufgrund der Zwischenkonvertierung von einer Python-Liste zurück in eine inhärente Ineffizienz auf Numpy-Array.
Optimierte Strategien
Durch das Testen verschiedener Methoden entstehen die optimalen Lösungen:
1. Verwenden Sie integrierte Numpy-Funktionen:
Wenn die Funktion, die Sie zuordnen, bereits in Numpy vektorisiert ist (z. B. x^2), bietet die direkte Verwendung eine bessere Leistung:
squares = x ** 2
2. Vektorisierung mit numpy.vectorize:
Bei benutzerdefinierten Funktionen zeigt die Vektorisierung mit numpy.vectorize erhebliche Geschwindigkeitsgewinne:
f = lambda x: x ** 2 vf = np.vectorize(f) squares = vf(x)
3. numpy.fromiter:
Dieser Ansatz erstellt einen Iterator aus der Funktion und verwendet numpy.fromiter, um effizient ein Numpy-Array zu erstellen:
squares = np.fromiter((squarer(xi) for xi in x), x.dtype)
4. numpy.array(list(map(...)):
Eine weitere optimierte Alternative ist die Verwendung von Map und die anschließende Konvertierung in ein Numpy-Array:
squares = np.array(list(map(squarer, x)))
Durchgeführte Benchmarks Die Verwendung von Perfplot zeigt, dass diese optimierten Methoden den ursprünglichen Ansatz zum Listenverständnis deutlich übertreffen.
Das obige ist der detaillierte Inhalt vonWas ist die effizienteste Möglichkeit, Funktionen über ein NumPy-Array abzubilden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!