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
Freigeben: 2024-12-13 17:03:09
Original
666 Leute haben es durchsucht

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])
Nach dem Login kopieren

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
Nach dem Login kopieren

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage