![](/img/trans.png)
[英]Use strings as slice indices in Python ? (TypeError: slice indices must be integers or None or have an __index__ method)
[英]Python - slice indices must be integers or None or have an __index__ method
我在使用 scipy 的 fmin 求解器時遇到問題。 我希望它為我的 ARIMA 模型優化參數。 當直接運行代碼(沒有 fmin)時,一切正常,但在放入優化器時出現錯誤:
Traceback (most recent call last):
File "D:/Work/repo_python/bandwidth_estimation/estima.py", line 169, in <module>
optimum = fmin(criterion, x0)
File "C:\Users\Pigeon\AppData\Local\Programs\Python\Python36\lib\site-packages\scipy\optimize\optimize.py", line 442, in fmin
res = _minimize_neldermead(func, x0, args, callback=callback, **opts)
File "C:\Users\Pigeon\AppData\Local\Programs\Python\Python36\lib\site-packages\scipy\optimize\optimize.py", line 585, in _minimize_neldermead
fsim[k] = func(sim[k])
File "C:\Users\Pigeon\AppData\Local\Programs\Python\Python36\lib\site-packages\scipy\optimize\optimize.py", line 326, in function_wrapper
return function(*(wrapper_args + args))
File "D:/Work/repo_python/bandwidth_estimation/estima.py", line 18, in criterion
model_arima = ARIMA(train, order=parametres)
File "C:\Users\Pigeon\AppData\Local\Programs\Python\Python36\lib\site-packages\statsmodels\tsa\arima_model.py", line 988, in __new__
mod.__init__(endog, order, exog, dates, freq, missing)
File "C:\Users\Pigeon\AppData\Local\Programs\Python\Python36\lib\site-packages\statsmodels\tsa\arima_model.py", line 1009, in __init__
self._first_unintegrate = unintegrate_levels(self.endog[:d], d)
TypeError: slice indices must be integers or None or have an __index__ method
這是代碼:
def criterion(parametres):
parametres = tuple(parametres)
control_sum = 0
train = [5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.361409086288781, 5.899251779517743, 5.766256093003701, 5.795872889382786, 5.637485909370455, 5.7453759249241045, 5.066030606246879, 5.0944229577563425, 5.0944229577563425, 5.0944229577563425, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.361409086288781, 5.899251779517743, 5.766256093003701, 5.795872889382786, 5.637485909370455, 5.7453759249241045, 5.066030606246879, 5.0944229577563425, 5.0944229577563425, 5.0944229577563425, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.361409086288781, 5.899251779517743, 5.766256093003701, 5.795872889382786, 5.637485909370455, 5.7453759249241045, 5.066030606246879, 5.0944229577563425, 5.0944229577563425, 5.0944229577563425, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.361409086288781, 5.899251779517743, 5.766256093003701, 5.795872889382786, 5.637485909370455, 5.7453759249241045, 5.066030606246879, 5.0944229577563425, 5.0944229577563425, 5.0944229577563425, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.361409086288781, 5.899251779517743, 5.766256093003701, 5.795872889382786, 5.637485909370455, 5.7453759249241045, 5.066030606246879, 5.0944229577563425, 5.0944229577563425, 5.0944229577563425, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.361409086288781, 5.899251779517743, 5.766256093003701, 5.795872889382786, 5.637485909370455, 5.7453759249241045, 5.066030606246879, 5.0944229577563425, 5.0944229577563425, 5.0944229577563425, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.361409086288781, 5.899251779517743, 5.766256093003701, 5.795872889382786, 5.637485909370455, 5.7453759249241045, 5.066030606246879, 5.0944229577563425, 5.0944229577563425, 5.0944229577563425, 5.545763155811349]
model_arima = ARIMA(train, order=parametres)
model_arima_fit = model_arima.fit()
predictions = model_arima_fit.forecast(steps=24)[0]
for i in range(0,len(predictions)):
control_sum += (predictions[i]-values[i])**2
print(control_sum)
return control_sum
x0 = [1,1,1]
optimum = fmin(criterion, x0)
正如我之前所說 - 如果我在函數之外運行代碼 - 一切正常。 問題是當它進入 fmin 求解器的函數時。
這是因為fmin
正在將浮點數傳遞給參數,並且它們需要是int
您可以通過將parametres
為 int 來修復它,如下所示
parametres = parametres.astype(int)
和所有在一起:
def criterion(parametres):
parametres = parametres.astype(int)
control_sum = 0
train = [5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.361409086288781, 5.899251779517743, 5.766256093003701, 5.795872889382786, 5.637485909370455, 5.7453759249241045, 5.066030606246879, 5.0944229577563425, 5.0944229577563425, 5.0944229577563425, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.361409086288781, 5.899251779517743, 5.766256093003701, 5.795872889382786, 5.637485909370455, 5.7453759249241045, 5.066030606246879, 5.0944229577563425, 5.0944229577563425, 5.0944229577563425, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.361409086288781, 5.899251779517743, 5.766256093003701, 5.795872889382786, 5.637485909370455, 5.7453759249241045, 5.066030606246879, 5.0944229577563425, 5.0944229577563425, 5.0944229577563425, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.361409086288781, 5.899251779517743, 5.766256093003701, 5.795872889382786, 5.637485909370455, 5.7453759249241045, 5.066030606246879, 5.0944229577563425, 5.0944229577563425, 5.0944229577563425, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.361409086288781, 5.899251779517743, 5.766256093003701, 5.795872889382786, 5.637485909370455, 5.7453759249241045, 5.066030606246879, 5.0944229577563425, 5.0944229577563425, 5.0944229577563425, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.361409086288781, 5.899251779517743, 5.766256093003701, 5.795872889382786, 5.637485909370455, 5.7453759249241045, 5.066030606246879, 5.0944229577563425, 5.0944229577563425, 5.0944229577563425, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.545763155811349, 5.361409086288781, 5.899251779517743, 5.766256093003701, 5.795872889382786, 5.637485909370455, 5.7453759249241045, 5.066030606246879, 5.0944229577563425, 5.0944229577563425, 5.0944229577563425, 5.545763155811349]
print(parametres)
model_arima = ARIMA(train, order=parametres)
model_arima_fit = model_arima.fit()
predictions = model_arima_fit.forecast(steps=24)[0]
for i in range(0,len(predictions)):
control_sum += (predictions[i]-values[i])**2
print(control_sum)
return control_sum
x0 = [1,1,1]
optimum = fmin(criterion, x0)
此外,您在函數中使用變量values
,而它未在函數中定義,這也可能會導致問題。
注意:為了在fmin
之外使用它,您需要傳入一個 numpy 數組,而不是將其轉換為函數中的元組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.