web-dev-qa-db-ja.com

numpy配列で逆累積和を実行します

誰かがnumpy配列で逆累積合計を行う方法を推奨できますか?

「逆累積合計」は次のように定義されています(この手順の名前の修正は歓迎します)。

もし

x = np.array([0,1,2,3,4])

その後

np.cumsum(x)

与える

array([0,1,3,6,10])

しかし、私は取得したいと思います

array([10,10,9,7,4]

誰かがこれを行う方法を提案できますか?

33
atomh33ls

これはそれを行います:

np.cumsum(x[::-1])[::-1] 
50
atomh33ls

これには.flipud()も使用できます。これは_[::-1]_ https://docs.scipy.org/doc/numpy/reference/generated/numpy.flipud。 html

_In [0]: x = np.array([0,1,2,3,4])

In [1]: np.flipud(np.flipud(x).cumsum())
Out[1]: array([10, 10,  9,  7,  4]
_

.flip()はNumPy 1.12で新しく追加され、.flipud().fliplr()を1つのAPIに結合しています。 https://docs.scipy.org/doc/numpy/reference/generated/numpy.flip.html

これは同等であり、関数呼び出しが少なくなっています。

_np.flip(np.flip(x, 0).cumsum(), 0)
_
3
Marc Gibbons