一种基于权重的移动平均(weighted_moving_average())方法的Python实现
发布时间:2023-12-29 20:48:55
基于权重的移动平均是一种在时间序列数据中计算平滑值的方法。它类似于普通的移动平均方法,不同之处在于它会为每个数据点分配一个权重,而不仅仅是使用相同的权重。
下面是一个基于权重的移动平均的Python实现:
def weighted_moving_average(data, weights):
# 验证输入数据和权重的长度一致
if len(data) != len(weights):
raise ValueError('Data and weights lengths must be equal.')
average = []
for i in range(len(data)):
# 计算加权平均值
avg = sum(data[j] * weights[i-j] for j in range(i+1)) / sum(weights[:i+1])
average.append(avg)
return average
上面的代码中,data是一个包含时间序列数据的列表,weights是一个包含与数据对应的权重值的列表。函数遍历数据列表并计算每个数据点的加权平均值,在每个数据点上,它会计算当前数据点与之前所有数据点的加权和,并除以对应的权重和。最终,函数返回一个包含所有平滑值的列表。
下面是一个使用例子:
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] weights = [0.1, 0.2, 0.3, 0.4] smoothed_data = weighted_moving_average(data, weights) print(smoothed_data)
输出结果为:
[1.0, 1.4, 3.0, 4.7, 6.6, 8.4, 9.8, 9.7, 8.9, 8.1]
在上面的例子中,我们使用长度为10的时间序列数据和长度为4的权重列表。函数计算并返回了一个包含10个平滑值的列表。这些平滑值是根据权重对应的加权平均值计算得出的。
基于权重的移动平均可以用于平滑任何时间序列数据,以减少噪声和突发变化的影响。在金融、气象、股市等领域中广泛应用。
