如何解决此列表索引问题?

2024-10-17 06:21:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我总是在与python列表进行不断的斗争。我不知道我是如何做到这一点的,但每次我和list一起工作时,我最终都会结巴,我不知道如何解决这个问题

我相信这是一个非常简单的问题,但我已经尝试了一个小时,我完全被困住了

我想对pandas.series数据(称为train_data)执行指数运行平均,然后预测未来20天的输出(我知道,使用此模型,我实际上会在长时间预测中有很多错误,但我需要使用该模型来实际演示)

这是代码。这个错误只是一个简单的例子

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-40-cd9f9f5581ef> in <module>()
     17   running_mean = running_mean*decay + (1.0-decay)*my_data[pred_idx-1]
     18   run_avg_predictions14.append(running_mean)
---> 19   mse_errors.append((run_avg_predictions14[-1]-my_data[pred_idx])**2)
     20   run_avg_x14.append(date)
     21 

IndexError: list index out of range

但我不知道怎么解决它

import numpy as np
import pandas as pd

window_size14 = 14
pred_len = 20

my_data = []
for i in range(len(train_data)):
  my_data.append(train_data[i])

run_avg_predictions14 = []
run_avg_x14 = []
mse_errors = []
running_mean = 0.0
for i in range(pred_len):
  run_avg_predictions14.append(running_mean)
decay = 0.5
N = len(my_data)+pred_len-1
for pred_idx in range(1,N):
  running_mean = running_mean*decay + (1.0-decay)*my_data[pred_idx-1]
  run_avg_predictions14.append(running_mean)
  mse_errors.append((run_avg_predictions14[-1]-my_data[pred_idx])**2)
  run_avg_x14.append(date)

my_data = run_avg_predictions14

print('MSE error: %.5f'%(0.5*np.mean(mse_errors)))

train_data看起来像这样:

0      0.959707
1      0.959707
2      0.948718
3      0.959707
4      0.967033
         ...   
295    0.648352
296    0.769231
297    0.868132
298    0.956044
299    0.989011
Length: 300, dtype: float64

Tags: runindatalenmytrainmeanrunning
3条回答

您应该在此行之前定义train_data

line : for i in range(len(train_data)):

因为你没有上传错误本身,我只能猜测。但我认为你的问题在于:

N = len(my_data)+pred_len-1
for pred_idx in range(1,N):
running_mean = running_mean*decay + (1.0-decay)*my_data[pred_idx-1]

将pred_len添加到my_数据的长度,而不是减去一。但是你要用我的数据[pred_idx-1]来计算跑步平均值,它的数值是N,可能超出了范围。所以看起来你是在和清单上没有的东西相乘

你忘了线路上的pred_idx-1

  mse_errors.append((run_avg_predictions14[-1]-my_data[pred_idx-1])**2)

相关问题 更多 >