Ich habe eine Funktion f
, für exapmle:schnellere Alternative zur Verwendung der `map` Funktion
def f(x):
return x**2
und will ein Array über ein Intervall ausgewertet, bestehend aus f
erhalten, beispielsweise das Einheitsintervall (0, 1). Wir ca dazu wie folgt vor:
import numpy as np
X = np.arange(0,1,0.01)
arr = np.array(list(map(f, X)))
Doch diese letzte Zeile ist sehr zeitaufwendig, wenn die Funktion kompliziert ist (in meinem Fall ist es beinhaltet einige Integrale). Gibt es eine Möglichkeit, dies schneller zu machen? Ich bin froh, eine nicht-elegante Lösung zu haben - der Fokus liegt auf Geschwindigkeit.
Ich wäre nicht besorgt über die 'map()' Overhead wenn 'X' ist nicht riesig in der Länge. Verbringe Zeit damit, dein 'f()' zu optimieren. – zwer
Es ist keine Antwort auf Ihre Frage, aber eine Liste zu erstellen, nur um ein Array zu erstellen ist ziemlich ineffizient. Sie können ['fromiter()'] (https://docs.scipy.org/doc/numpy/reference/generated/numpy.fromiter.html) verwenden, um dies zu vermeiden.Sie müssen die Länge kennen, aber wenn es sich um eine Kartenoperation handelt, wissen Sie, dass sie mit dem Array übereinstimmt, über das Sie mappen. Wenn Sie jedoch mit Numpy Geschwindigkeit erreichen wollen, sollten Sie numpy-Operationen verwenden - Karten bedeuten python-seitige Schleifen und Operationen, die langsamer sind. –
@zwer Einverstanden. Sie können etwas beschleunigen, indem Sie ein Listenverständnis verwenden, aber es wird die Gesamtlaufzeit nicht wesentlich verändern. Sehen Sie sich einige Experimente an, die ich gemacht habe, um diese Frage zu beantworten (http://stackoverflow.com/questions/39045396/where-does-the-performance-boost-of-map-or-list-comprehension-implementations-ov/39046254) # 39046254) –