我能想到的最简单的结果是
import numpy as np
x = np.arange(10)
x[::-1].cumsum()[::-1]
给了
array([45, 45, 44, 42, 39, 35, 30, 24, 17, 9])
编辑:正如 dg99 所指出的,还有a post about the efficiency of reversing an array。因此,[::-1] 似乎是你能得到的最好的。因此,x[::-1].cumsum()[::-1] 似乎也是进行反向 cumsum 的最有效方式。
第二次编辑:
为了完整起见,如果你有一个多维数组,你可以通过以下方式获得沿最内维的反向 cumsum:
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]]])
和
x[...,::-1].cumsum(axis=-1)[...,::-1]
返回
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]]])