Python Numpy.cumsum的反面

Python Numpy.cumsum的反面,python,numpy,Python,Numpy,这是前进方向的总和: > import numpy as np > np.arange(10) array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) > np.cumsum(np.arange(10)) array([ 0, 1, 3, 6, 10, 15, 21, 28, 36, 45]) 我想在相反的方向执行cumsum,这将给我 array([45, 45, 44, 42, 39, 35, 30, 24, 17, 9]) 最简单、最有效的方

这是前进方向的总和:

> import numpy as np
> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
> np.cumsum(np.arange(10))
array([ 0,  1,  3,  6, 10, 15, 21, 28, 36, 45])
我想在相反的方向执行cumsum,这将给我

array([45, 45, 44, 42, 39, 35, 30, 24, 17, 9])
最简单、最有效的方法是什么?

怎么样

np.cumsum(np.arange(10)[::-1])

查看哪个讨论了反转numpy数组。

我能想到的最简单的方法是

import numpy as np
x = np.arange(10)
x[::-1].cumsum()[::-1]

array([45, 45, 44, 42, 39, 35, 30, 24, 17,  9])
编辑:正如dg99所指出的那样,还有。因此,
[::-1]
似乎是你能得到的最好的。因此,
x[::-1].cumsum()[::-1]
似乎也是进行反向求和的最有效方法

第二次编辑: 为完整起见,如果您有多维数组,您可以通过以下方式获得最内层维度的反向求和:

x[...,::-1].cumsum(axis=-1)[...,::-1]
比如说,

x = np.array(((range(10), range(10)), (range(10), range(10))))
print(x)
印刷品

array([[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]],

   [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]])

返回

array([[[45, 45, 44, 42, 39, 35, 30, 24, 17,  9],
    [45, 45, 44, 42, 39, 35, 30, 24, 17,  9]],

   [[45, 45, 44, 42, 39, 35, 30, 24, 17,  9],
    [45, 45, 44, 42, 39, 35, 30, 24, 17,  9]]])
array([[[45, 45, 44, 42, 39, 35, 30, 24, 17,  9],
    [45, 45, 44, 42, 39, 35, 30, 24, 17,  9]],

   [[45, 45, 44, 42, 39, 35, 30, 24, 17,  9],
    [45, 45, 44, 42, 39, 35, 30, 24, 17,  9]]])