web-dev-qa-db-fra.com

Effectuer une somme cumulative inverse sur un tableau numpy

Quelqu'un peut-il recommander un moyen de faire une somme cumulative inversée sur un tableau numpy?

Lorsque la "somme cumulée inversée" est définie comme ci-dessous (je salue toute correction du nom de cette procédure):

si

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

puis

np.cumsum(x)

donne

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

Cependant, je voudrais obtenir

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

Quelqu'un peut-il suggérer une façon de procéder?

33
atomh33ls

Cela le fait:

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

Vous pouvez également utiliser .flipud(), ce qui équivaut à [::-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() est nouveau depuis NumPy 1.12 et combine les .flipud() et .fliplr() en une seule API. https://docs.scipy.org/doc/numpy/reference/generated/numpy.flip.html

C'est équivalent et a moins d'appels de fonction:

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