下面是前进方向的累积量:
> 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])我想向相反的方向执行累积和,这将给我
array([45, 45, 44, 42, 39, 35, 30, 24, 17, 9])最简单和最有效的方法是什么?
发布于 2015-02-19 21:49:08
我能想到的最简单的结果是
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]似乎也是进行反向累计最有效的方法。
第二编辑:为了完整性,如果您有一个多维数组,您可以通过以下方法获得最内部维度的反向累积和:
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]]])发布于 2015-02-19 21:46:44
https://stackoverflow.com/questions/28617430
复制相似问题