首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反向Numpy.cumsum

反向Numpy.cumsum
EN

Stack Overflow用户
提问于 2015-02-19 21:38:10
回答 2查看 4.1K关注 0票数 5

下面是前进方向的累积量:

代码语言:javascript
复制
> 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])

我想向相反的方向执行累积和,这将给我

代码语言:javascript
复制
array([45, 45, 44, 42, 39, 35, 30, 24, 17, 9])

最简单和最有效的方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-19 21:49:08

我能想到的最简单的结果是

代码语言:javascript
复制
import numpy as np
x = np.arange(10)
x[::-1].cumsum()[::-1]

这给

代码语言:javascript
复制
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]似乎也是进行反向累计最有效的方法。

第二编辑:为了完整性,如果您有一个多维数组,您可以通过以下方法获得最内部维度的反向累积和:

代码语言:javascript
复制
x[...,::-1].cumsum(axis=-1)[...,::-1]

例如,

代码语言:javascript
复制
x = np.array(((range(10), range(10)), (range(10), range(10))))
print(x)

版画

代码语言:javascript
复制
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]]])

代码语言:javascript
复制
 x[...,::-1].cumsum(axis=-1)[...,::-1]

返回

代码语言:javascript
复制
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]]])
票数 7
EN

Stack Overflow用户

发布于 2015-02-19 21:46:44

怎么样

代码语言:javascript
复制
np.cumsum(np.arange(10)[::-1])

请参见this question,它讨论了反向numpy数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28617430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档