繁体   English   中英

Python 中的指数移动平均线 - 错误消息

[英]Exponential moving average in Python - Error message

我有以下要求,我需要编写一个 python 代码,该代码将使用指数移动平均线平滑数据数组。 对于输入数据,我们假设一个包含 N 个元素的行向量。

我们对平均值使用以下表达式:Xavg.k = axavg.X-1 + (1 - a) · Xk,除了 k = 1,其中 Xavg.1 = x;。

我们可以使用以下语句(对于 MATLAB)创建一个包含来自正态分布的噪声数据的行向量,平均值为 5.0,标准差为 3.0,以测试您的程序: inputData = 5.0 + 3.0 - randn(1,100); a = 0.8;

请仅使用基本运算符,如赋值、比较、条件语句和循环。 不要使用 Python 的内置功能或高级功能。 我编写了以下代码,但最终得到了如下所述的错误消息。

有人可以帮忙解决这个错误或提供一些不同的代码片段来解决它吗?

代码:

import numpy as np
import random
def exponential_smoothing(series,alpha):
   
results = np.zeros_like(series)
results[0] = series[0]
for t in range(1, series.shape[0]):
    results[t] = alpha * series[t] + (1 - alpha) * results[t-1]

return results

Data= random.sample(range(1,100),10)
inputData=[]
for i in Data:
      num=5.0+3.0*float(i)
      inputData.append(num)
print(inoutData)
inputData = np.array(inputData).reshape(len(inputData),1)
result= exponential_smoothing(inputData,0.8)
answer=np.array(result).reshape(1,len(result))
for i in answer :
    print(i)

错误信息

NameErrorTraceback (most recent call last)
<ipython-input-20-4e5ece455b20> in <module>
      3 def exponential_smoothing(series,alpha):
      4     """given a series and alpha,return series of exponentially smoothed points"""
----> 5 results = np.zeros_like(series)
      6 results[0] = series[0]
      7 for t in range(1, series.shape[0]):

NameError: name 'series' is not defined

似乎您的错误是缩进的结果。 我没有太多机会查看实际代码,但您还需要在 function 中缩进内容。 正如我注意到您的打印语句中的“inoutdata”拼写错误。 所以代码应该是这样的:

import numpy as np
import random
def exponential_smoothing(series,alpha):
    results = np.zeros_like(series)
    results[0] = series[0]
    for t in range(1, series.shape[0]):
        results[t] = alpha * series[t] + (1 - alpha) * results[t-1]
    return results

Data = random.sample(range(1,100),10)
inputData = []
for i in Data:
      num=5.0+3.0*float(i)
      inputData.append(num)
print(inputData)
inputData = np.array(inputData).reshape(len(inputData),1)
result= exponential_smoothing(inputData,0.8)
answer=np.array(result).reshape(1,len(result))
for i in answer:
    print(i)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM