2017-11-30 4 views
2

累積合計を生成する最も慣用的な方法は、移動するにつれて「フェードアウト」します。例を挙げて説明しましょう。numpyで信号をフェードアウトする

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

しかし、私は要因<1を提供し、のようなものを生成したいと思います:

>>> 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) 

それは速い場合、それは大きなプラスだし!

+0

明確にするために、ゼロ以外の数が多い別のサンプルケースを表示しますか? – Divakar

+3

これまでに示してきたことは、 "畳み込み"の匂いがするのですが、@Divakarはもっと多くの例を見ると良いと指摘しています。 –

+0

@PaulPanzer:大きなアドバイスは、それを試してみて、それは私が探していたものでした!書くと答え、私はあなたにいくつかのポイントを取得します。 :) –

答えて

4

あなたの結果は、線形畳み込みによって得ることができる。

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. ]) 

パフォーマンスは同じロジックの速い実装である対価の使用scipy.signal.fftconvolveある場合。

関連する問題