我有一个numpy数组
np.array(data).shape
(50,50)
现在,我想查找轴= 1上的累计和。问题是,cumsum创建了一个累积和数组,但是我只关心每行的最终值。
这当然是错误的:
np.cumsum(data, axis=1)[-1]
有没有这样做的简洁方法,而无需遍历数组。
答案 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
。