numpy 如何忽略麻木移动平均线中的特定数字?

oewdyzsn  于 2023-01-13  发布在  其他
关注(0)|答案(1)|浏览(104)

假设我有一个简单的numpy数组:

a = np.array([1,2,3,4,5,6,7])

我可以简单地计算大小为3的窗口的移动平均值:

np.convolve(a,np.ones(3),'valid') / 3

这将产生

array([2., 3., 4., 5., 6.])

现在,我想取一个移动平均线,但不包括任何出现数字“2”的时间。换句话说,对于前3个数字,最初,它是(1 + 2 + 3)/ 3 = 2。现在,我想做(1 + 3)/ 2 = 2。如何指定一个用户定义的数字来忽略和计算移动平均值,而不包括此用户定义的数字?我想把这个保持在某种 numpy 功能上,而不带Pandas进来。

m1m5dgzv

m1m5dgzv1#

您可以使用遮罩将不需要的值替换为0,并单独计算有效项目的数量,然后计算比率:

a = np.array([1,2,3,4,5,6,7])

mask = a != 2

num = np.convolve(np.where(mask, a, 0), np.ones(3), 'valid')
denom = np.convolve(mask, np.ones(3), 'valid')

out = num/denom

输出:

array([2. , 3.5, 4. , 5. , 6. ])

相关问题