python中数组的加权平均值

我需要形成一个新的数字序列,方法是替换每个数据值,从第4个条目开始,从最后一个条目的第4个条目结束,并使用以下公式对它周围的七个点进行加权平均: / p>

(y[i-3] + 2y[i-2] + 3y[i-1] + 3y[i] + 3y[i+1] + 2y[i+2] + y[i+3]) // 15 

(注意。i-或i +一些数字是下标,以防不明显。)

这里是产生原始图形的代码,但是我需要使用上述公式对新图形进行平滑处理。数据文件产生一个整数数组,设置为[-24,4,-4,-12,-52...]。我什至不知道从哪里开始该公式会有所帮助。

from matplotlib import pyplot as plt

with open('2_Record2308.dat','r') as f:

    data = [int(x) for x in f]

graph = data

fig,ax = plt.subplots()

ax.plot(graph)

ax.legend()

ax.set_ylabel('Raw')

plt.tight_layout()

plt.show()
kkaren 回答:python中数组的加权平均值

此代码应能解决问题:

avg = [(sum(y) + sum(y[1:-1]) + sum(y[2:-2])) // 15 
       for y in zip(data[:-6],data[1:-5],data[2:-4],data[3:-3],data[4:-2],data[5:-1],data[6:])] 

此处zip(data[:-6],...)创建连续的7元组。

sum(y)一次取7个数字。 sum(y[1:-1])再次取5个内部数字。 sum(y[2:-2])第三次取3个内部数字。

顺便说一句,在除以15之前加7将更接近于平均。在原始公式中,平均值总是向下取整。

所以,我建议(sum(y) + sum(y[1:-1]) + sum(y[2:-2]) + 7) // 15

这是基于您的代码和随机游走数据的测试。

from matplotlib import pyplot as plt
import random

def do_averaging_7(data):
    return [(sum(y) + sum(y[1:-1]) + sum(y[2:-2]) + 7) // 15
            for y in zip(data[:-6],data[6:])]

data = [random.randrange(-100,101) for _ in range(100)]
for i in range(1,len(data)):
    data[i] += data[i-1]
avg = do_averaging_7(data)

fig,ax = plt.subplots()
ax.plot(range(len(data)),data,"blue")
ax.plot(range(3,3+len(avg)),avg,color="red")
ax.set_ylabel('Raw')
plt.tight_layout()
plt.show()

结果图:resulting plot

本文链接:https://www.f2er.com/3148707.html

大家都在问