滑动窗口中numpy数组的和(无循环)

sbdsn5lh  于 2023-06-23  发布在  其他
关注(0)|答案(2)|浏览(112)

我有一个大小为**(n,)的简单数组,我想用那个构建另一个数组,而不使用循环。我想对大小为4**的窗口中的值求和。例如,在下面的数组中,前4个值(4,0,2,1)的总和为7,后4个值的总和为2,第三四个值的总和为8。你能帮我吗谢谢

import numpy as np
A= np.random.randint(5, size = (12,))
#A array([4, 0, 2, 1, 2, 0, 0, 0, 2, 0, 4, 2])
out: array([7, 2,8])
kxkpmulp

kxkpmulp1#

这是一个简单的求和-制作一个2d数组并在列之间相加:

In [173]: x=np.array([4, 0, 2, 1, 2, 0, 0, 0, 2, 0, 4, 2])

In [174]: x
Out[174]: array([4, 0, 2, 1, 2, 0, 0, 0, 2, 0, 4, 2])

In [175]: x.reshape(-1,4)
Out[175]: 
array([[4, 0, 2, 1],
       [2, 0, 0, 0],
       [2, 0, 4, 2]])

In [176]: x.reshape(-1,4).sum(axis=1)
Out[176]: array([7, 2, 8])
4ktjp1zp

4ktjp1zp2#

你可以取累计和的一个跨步子集,然后从第二个和中减去第一个和:

import numpy as np

A = np.array([4, 0, 2, 1, 2, 0, 0, 0, 2, 0, 4, 2])

R = A.cumsum()[3::4]
R[1:] -= R[:-1]

print(R) # [7 2 8]

相关问题