【问题标题】:Numpy.cumsum in reverseNumpy.cumsum 反向
【发布时间】:2015-04-21 10:48:21
【问题描述】:

这是正向的cumsum:

> 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])

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

【问题讨论】:

    标签: python numpy


    【解决方案1】:

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

    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]]])
    

    【讨论】:

      【解决方案2】:

      怎么样

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

      请参阅 this question,其中讨论了反转 numpy 数组。

      【讨论】:

        猜你喜欢
        • 2014-07-02
        • 2015-01-31
        • 2021-08-21
        • 2017-08-18
        • 2014-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-15
        相关资源
        最近更新 更多