计算python数组中每5个元素的总和

时间:2017-02-24 16:49:14

标签: python arrays numpy

我有一个python数组,我想在其中计算每5个元素的总和。在我的例子中,我有数组c有十个元素。 (实际上它有更多的元素。)

c = [1, 0, 0, 0, 0, 2, 0, 0, 0, 0]

所以最后我想要一个新的数组(c_new),它应该显示前5个元素的总和,以及后5个元素

所以结果应该是那个

1+0+0+0+0 = 1
2+0+0+0+0 = 2

c_new = [1, 2]

感谢您的帮助     马库斯

3 个答案:

答案 0 :(得分:7)

您可以通过将索引传递到您想要拆分的位置来使用np.add.reduceat

import numpy as np
c = [1, 0, 0, 0, 0, 2, 0, 0, 0, 0]
np.add.reduceat(c, np.arange(0, len(c), 5))
# array([1, 2])

答案 1 :(得分:6)

这是一种做法 -

c = [1, 0, 0, 0, 0, 2, 0, 0, 0, 0]
print [sum(c[i:i+5]) for i in range(0, len(c), 5)]

结果 -

[1, 2]

答案 2 :(得分:2)

如果五个除以你的向量的长度并且它是连续的那么

np.reshape(c, (-1, 5)).sum(axis=-1)

如果它不连续,它也可以工作,但它通常效率较低。

基准:

def aredat():
    return np.add.reduceat(c, np.arange(0, len(c), 5))

def reshp():
    np.reshape(c, (-1, 5)).sum(axis=-1)

c = np.random.random(10_000_000)

timeit(aredat, number=100)
3.8516048429883085
timeit(reshp, number=100)
3.09542763303034

所以在可能的情况下,reshape似乎更快一点; reduceat具有优雅处理非五乘矢量的优势。