Heim >Backend-Entwicklung >Python-Tutorial >Was ist die effizienteste Möglichkeit, Funktionen über NumPy-Arrays abzubilden?

Was ist die effizienteste Möglichkeit, Funktionen über NumPy-Arrays abzubilden?

Barbara Streisand
Barbara StreisandOriginal
2024-12-13 17:03:09663Durchsuche

What's the Most Efficient Way to Map Functions Over NumPy Arrays?

Erkundung der effizienten Array-Zuordnung in NumPy

In dieser Diskussion befassen wir uns mit den effizientesten Methoden zur Zuordnung von Funktionen über NumPy-Arrays. Ein gängiger Ansatz besteht darin, ein Listenverständnis zu verwenden und anschließend zurück in ein NumPy-Array zu konvertieren:

import numpy as np 

x = np.array([1, 2, 3, 4, 5])
squarer = lambda t: t ** 2
squares = np.array([squarer(xi) for xi in x])

Dieser Ansatz kann jedoch aufgrund der Erstellung und Konvertierung von Python-Zwischenlisten Ineffizienzen aufweisen. Lassen Sie uns alternative Methoden erkunden, die möglicherweise eine verbesserte Leistung bieten.

Nutzung nativer NumPy-Funktionen

Wenn die Zielfunktion bereits in NumPy implementiert ist, ist es optimal, diese direkt zu nutzen, z demonstriert durch:

x ** 2

Dieser Ansatz ist aufgrund der inhärenten Optimierung von NumPys Native deutlich schneller als andere Methoden Funktionen.

Vektorisieren von Funktionen

Wenn die gewünschte Funktion nicht in NumPy enthalten ist, ist die Vektorisierung eine leistungsstarke Technik, die die elementweise Anwendung der Funktion auf das Array ermöglicht . Dies kann erreicht werden mit:

vf = np.vectorize(f)
vf(x)

Dieser Ansatz bietet eine effiziente Implementierung für vektorisierte Operationen.

Verwendung von fromiter()

Der fromiter() Die Funktion kann verwendet werden, um einen Iterator zu erstellen, der Elemente basierend auf den bereitgestellten Funktions- und Array-Werten generiert:

np.fromiter((f(xi) for xi in x), x.dtype)

Dieser Ansatz eignet sich besonders zum Generieren benutzerdefinierter Array-Elemente aus einem Iterator.

Leistungsvergleich

Empirische Tests zeigen erhebliche Leistungsunterschiede zwischen verschiedenen Mapping-Methoden. Wenn die Funktion in NumPy vektorisiert ist, ist die direkte Nutzung dieser Funktion hinsichtlich der Geschwindigkeit beispiellos. Bei benutzerdefinierten Funktionen bietet die Vektorisierung oder fromiter() häufig einen erheblichen Vorteil gegenüber auf Listenverständnis basierenden Methoden.

Fazit

Der effizienteste Ansatz für die Zuordnung von Funktionen über NumPy-Arrays hängt von der spezifischen Funktion und den Dateneigenschaften ab. Wenn möglich, wird dringend empfohlen, native NumPy-Funktionen zu nutzen. Vektorisierung und fromiter() bieten effiziente Alternativen für benutzerdefinierte Funktionen. Leistungstests sind unerlässlich, um die optimale Methode für ein bestimmtes Szenario zu ermitteln.

Das obige ist der detaillierte Inhalt vonWas ist die effizienteste Möglichkeit, Funktionen über NumPy-Arrays abzubilden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn