Kann die Cumsum-Funktion in NumPy beim Hinzufügen nachlassen?

8

Ich habe ein Array von Werten a = (2,3,0,0,4,3)

%Vor%

Gibt es eine Möglichkeit, cumsum in numpy zu verwenden und den Wert von .95 auf jede Zeile anzuwenden, bevor der nächste Wert hinzugefügt wird?

    
D_C_A 07.03.2015, 12:55
quelle

4 Antworten

8

Sie fragen nach einem einfachen IIR-Filter . Scipys lfilter () ist dafür gemacht:

%Vor%     
Dietrich 07.03.2015 13:19
quelle
4

Wenn du nur mit einem 1D-Array arbeitest, dann brauchst du nur wenig scipy oder schreibe ein benutzerdefiniertes Kommando, um ufunc für numpy zu reduzieren. In Python 3.3+ kannst du itertools.accumulate verwenden, zB:

%Vor%     
Jon Clements 07.03.2015 13:38
quelle
1

Ich denke nicht, dass dies in NumPy alleine leicht gemacht werden kann, ohne eine Schleife zu benutzen.

Eine arraybasierte Idee wäre die Berechnung der Matrix M_ij = .95 ** i * a [N-j] (wobei N die Anzahl der Elemente in a ist). Die Zahlen, nach denen Sie suchen, werden gefunden, indem Einträge diagonal summiert werden (mit i-j konstant). Sie könnten also mehrere numpy.diagonal(…).sum() verwenden.

Der gute alte Algorithmus, den Sie skizzieren, ist klarer und wahrscheinlich schon ziemlich schnell (sonst können Sie Cython verwenden).

Was du mit NumPy ohne eine einzige Schleife machen willst, klingt für mich wie Zauberei. Hut ab vor jedem, der das durchziehen kann.

    
EOL 07.03.2015 13:13
quelle
0

Numba bietet eine einfache Möglichkeit, vectorize eine Funktion zu erstellen und ein < eine universelle Funktion "https://docs.scipy.org/doc/numpy/reference/ufuncs.html"> ( ufunc.accumulate ):

%Vor%     
Josh Bode 21.10.2017 07:02
quelle

Tags und Links