如何找到整个numpy轴的最终累积总和?

时间:2018-11-02 21:26:30

标签: python numpy

我有一个numpy数组

np.array(data).shape 
(50,50)

现在,我想查找轴= 1上的累计和。问题是,cumsum创建了一个累积和数组,但是我只关心每行的最终值。

这当然是错误的:

np.cumsum(data, axis=1)[-1]

有没有这样做的简洁方法,而无需遍历数组。

3 个答案:

答案 0 :(得分:4)

您已经快到了,但是正如您现在拥有的那样,您只选择最后一行。您需要从最后一列中选择所有行,因此末尾的索引应为:[:,-1]

示例:

>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])

>>> a.cumsum(axis=1)[:,-1]
array([ 10,  35,  60,  85, 110])

请注意,我将其保留下来,因为我认为它可以解释您的尝试出了什么问题,但是诚然,在其他答案中还有更有效的方法!

答案 1 :(得分:3)

每行的 final 累积总和,实际上就是每行的 sum 行向总和 ,因此我们可以将其实现为:

>>> x.sum(axis=1)
array([ 10,  35,  60,  85, 110])

因此,在这里,对于每一行,我们计算所有列的总和。因此,我们不需要先生成它们之间的和(它们很可能会存储在numpy的累加器中),而不必在数组中“散发”。

答案 2 :(得分:2)

如果不需要任何ufunc的中间累积结果,则可以使用numpy.ufunc.reduce

>>> a = np.arange(9).reshape(3,3)
>>> a
>>> 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> 
>>> np.add.reduce(a, axis=1)
>>> array([ 3, 12, 21])

但是,在sum的情况下,Willem's answer显然是优越的,因此是首选。请记住,在一般情况下,有ufunc.reduce