2017-11-30 2 views
2

Was ist die idiomatischste Art, eine kumulative Summe zu erzeugen, die beim Fortschreiten "ausblendet". Lassen Sie mich das mit einem Beispiel erklären.Ausblenden eines Signals in numpy

>>> np.array([1,0,-1,0,0]).cumsum() 
array([1, 1, 0, 0, 0], dtype=int32) 

Aber ich würde einen Faktor <1 bieten möchten und produzieren so etwas wie:

>>> np.array([1,0,-1,0,0]).cumsum_with_factor(0.5) 
array([1.0, 0.5, -0.75, -0.375, -0.1875], dtype=float64) 

Es ist ein großes Plus, wenn es schnell!

+0

Zeigen Sie uns einen weiteren Beispielfall mit mehr Nicht-Nullen, nur um zu klären? – Divakar

+3

Was Sie bisher gezeigt haben, riecht nach "Convolution", aber wie @Divakar zu Recht darauf hinweist, wäre es gut, weitere Beispiele zu sehen. –

+0

@PaulPanzer: Toller Rat, versuchte es und das war genau das, wonach ich suchte! Schreibe auf und antworte und ich bekomme ein paar Punkte. :) –

Antwort

4

Ihr Ergebnis kann durch eine lineare Faltung erhalten:

signal = np.array([1,0,-1,0,0]) 
kernel = 0.5**np.arange(5) 
np.convolve(signal, kernel, mode='full') 
# array([ 1. , 0.5 , -0.75 , -0.375 , -0.1875, -0.125 , -0.0625, 
      0. , 0. ]) 

Wenn Leistung eine Verwendung Überlegung ist scipy.signal.fftconvolve, die eine schnellere Implementierung der gleichen Logik.

Verwandte Themen