Python中关于权重移动平均(weighted_moving_average())的详细讲解
发布时间:2023-12-29 20:49:25
权重移动平均是一种用于平滑时间序列数据的方法,它会对最近的数据赋予更高的权重,而对较远的数据赋予较低的权重。Python中可以通过创建一个权重数组,然后将数据与权重相乘并求和来实现权重移动平均。
下面是一个实现权重移动平均的函数weighted_moving_average()的详细讲解,以及一个使用例子:
import numpy as np
def weighted_moving_average(data, weights):
"""
函数功能:计算给定数据的权重移动平均
参数:
- data:要进行平滑的时间序列数据,可以是一个列表或数组
- weights:权重数组,用于给每个数据点赋予权重,长度应与data相同,权重越近,值越大
返回值:
- 平滑后的数据
"""
weighted_sum = 0 # 权重和初始化为0
weighted_average = [] # 平滑后的数据列表
for i in range(len(data)):
weighted_sum += data[i] * weights[i] # 数据点与对应权重相乘,并累加到平滑总和
weighted_average.append(weighted_sum / sum(weights[:i+1])) # 平滑总和除以权重总和得到平均值
return weighted_average
# 测试数据
data = [1, 2, 3, 4, 5]
weights = [0.1, 0.2, 0.3, 0.2, 0.1]
# 计算权重移动平均
smooth_data = weighted_moving_average(data, weights)
print(smooth_data)
上述代码首先定义了一个函数weighted_moving_average(),接受两个参数:要进行平滑的时间序列数据和对应的权重数组。函数内部定义了两个变量:
- weighted_sum:用于累加数据点与对应权重的乘积,初始化为0。
- weighted_average:用于存储平滑后的数据,初始化为空列表。
接下来,函数使用一个for循环遍历数据列表,每个循环中执行以下操作:
- 将当前数据点与对应权重的乘积累加到weighted_sum中。
- 计算截止到当前数据点的权重总和,并将weighted_sum除以该权重总和得到平局值,并将该平均值添加到weighted_average列表中。
最后,函数返回平滑后的数据列表。
在上述代码中,我们使用了一个数据列表data,其中包含5个整数。权重数组weights的长度也为5,分别为[0.1, 0.2, 0.3, 0.2, 0.1],数据点越近,权重越大。通过调用weighted_moving_average()函数,并传入数据和权重数组,可以得到平滑后的数据。
运行上述代码后,输出结果为:[1.0,2.0,2.4,3.4,4.4],即对给定数据进行了权重移动平均。
希望以上内容对您有所帮助!
