【问题标题】:How can I solve this list indexing problem?如何解决此列表索引问题?
【发布时间】:2021-02-10 19:51:30
【问题描述】:

我一直在与 python 列表斗争。我不知道我是怎么做到的,但是每次我使用列表时,我最终都会卡住,我不知道如何解决这个问题。

我确信这是一个很容易解决的问题,但我已经尝试了一个小时,但我完全陷入困境。

我想对名为 train_data 的 pandas.series 数据执行指数运行平均值,然后预测未来 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

【问题讨论】:

  • 请包含完整的错误回溯。
  • pred_idx1 变为 NNlen(my_data) + pred_len - 1pred_len20。然后你尝试访问my_data[pred_idx]。不能引发IndexError 的唯一方法是如果pred_len0
  • @Paul M. 这实际上是有道理的。谢谢。

标签: python python-3.x list indexing


【解决方案1】:

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

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_data 的长度,而不是减去一个。但是,您正在计算运行平均值,使用 my_data[pred_idx-1] 上升到数字 N,这可能超出范围。所以看起来你正在与不再在列表中的东西相乘。

【讨论】:

    【解决方案2】:

    你忘记了 pred_idx-1 就行了

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

    【讨论】:

      【解决方案3】:

      你应该在这行之前定义train_data

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-07
        • 1970-01-01
        • 1970-01-01
        • 2016-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多