欢迎访问宙启技术站
智能推送

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],即对给定数据进行了权重移动平均。

希望以上内容对您有所帮助!