Ich führe eine verschachtelte Schleife in Python, die unten enthalten ist. Dies dient als eine grundlegende Möglichkeit, bestehende Finanzzeitreihen zu durchsuchen und Zeiträume in den Zeitreihen zu suchen, die bestimmten Merkmalen entsprechen. In diesem Fall gibt es zwei separate, gleich große Arrays, die das "Schließen" (d. H. Den Preis eines Vermögenswertes) und das "Volumen" (d. H. Den Betrag des Vermögenswerts, der über den Zeitraum ausgetauscht wurde) repräsentieren. Für jeden Zeitraum möchte ich mich auf alle zukünftigen Intervalle mit Längen zwischen 1 und INTERVAL_LENGTH freuen und sehen, ob irgendwelche dieser Intervalle Merkmale haben, die zu meiner Suche passen (in diesem Fall ist das Verhältnis der geschlossenen Werte größer als 1.0001 und weniger) als 1,5 und das summierte Volumen ist größer als 100).Wie beschleunigt man Python Nested Loop?
Mein Verständnis ist, dass einer der Hauptgründe für die Beschleunigung bei der Verwendung von NumPy ist, dass der Interpreter die Operanden nicht jedes Mal, wenn es etwas überprüft, die Operanden überprüft, solange Sie auf dem Array als arbeiten Ganze (zB numpy_array * 2), aber offensichtlich nutzt der untenstehende Code keinen Vorteil. Gibt es eine Möglichkeit, die interne Schleife durch irgendeine Art von Fensterfunktion zu ersetzen, was zu einer Beschleunigung führen könnte, oder auf irgendeine andere Weise, die numpy/scipy verwendet, um dies wesentlich in nativem Python zu beschleunigen?
Alternativ gibt es eine bessere Möglichkeit, dies im Allgemeinen zu tun (z. B. wird es viel schneller sein, diese Schleife in C++ zu schreiben und Webart zu verwenden)?
ARRAY_LENGTH = 500000
INTERVAL_LENGTH = 15
close = np.array(xrange(ARRAY_LENGTH))
volume = np.array(xrange(ARRAY_LENGTH))
close, volume = close.astype('float64'), volume.astype('float64')
results = []
for i in xrange(len(close) - INTERVAL_LENGTH):
for j in xrange(i+1, i+INTERVAL_LENGTH):
ret = close[j]/close[i]
vol = sum(volume[i+1:j+1])
if ret > 1.0001 and ret < 1.5 and vol > 100:
results.append([i, j, ret, vol])
print results
Ihre Berechnung sieht sehr einfach aus, warum verwenden Sie nicht Cython? – Tarantula