优化python移动平均函数

问题描述 投票:0回答:2

我正在 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 循环将字符串与我请求的索引的线性组合连接起来,但遇到类型错误。

python optimization signal-processing
2个回答
0
投票

您可以使用变量来定义平均值的大小并使用内置求和函数。 代码看起来像这样

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)

(如果代码不适合您,请写信给我)


0
投票

您可以按如下方式对 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]
© www.soinside.com 2019 - 2024. All rights reserved.