我正在 python 中创建一个函数来使用移动平均线过滤数据,这是我当前的代码:
def movingAvgR(data):
data = data.to_numpy()
filteredData = []
for i in range(len(data)-11):
y = (data[i]+data[i+1]+data[i+2]+data[i+3]+data[i+4]+data[i+5]+data[i+6]+data[i+7]+data[i+8]+data[i+9]+data[i+10]+data[i+11])/12
filteredData = np.append(filteredData,y)
return filteredData
我怎样才能做到这一点,这样我就不必对我想要包含在平均值中的指数数量进行硬编码?
我尝试使用 for 循环将字符串与我请求的索引的线性组合连接起来,但遇到类型错误。
您可以使用变量来定义平均值的大小并使用内置求和函数。 代码看起来像这样
def movingAvgR(data, size):
data = data.to_numpy()
filteredData = []
for i in range(len(data) - size + 1):
y = sum(data[i : i + size]) / size
filteredData.append(y)
return np.array(filteredData)
(如果代码不适合您,请写信给我)
您可以按如下方式对 ndarray 进行切片:
import numpy as np
import pandas as pd
def movingAverageR(data: pd.DataFrame, n=12) -> np.ndarray:
na = data.to_numpy()
ma = np.array([])
for i in range(len(na)-n):
y = np.average(na[i:i+n])
ma = np.append(ma, y)
return ma
df = pd.DataFrame(list(range(25)))
print(movingAverageR(df))
输出:
[ 5.5 6.5 7.5 8.5 9.5 10.5 11.5 12.5 13.5 14.5 15.5 16.5 17.5]