我有一个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]
感谢您的帮助 马库斯
答案 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
具有优雅处理非五乘矢量的优势。