Ошибка optimize.fmin: IndexError: слишком много индексов для массива - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь оптимизировать функцию в python, используя optimize.fmin от scipy. Функция должна оптимизировать вектор параметров, учитывая начальные условия и аргументы. Тем не менее, я продолжаю получать следующую ошибку, когда я пытаюсь запустить оптимизацию, при запуске самой функции работает:

IndexError: слишком много индексов для массива, строка 1, в параметризации

Вкратце мой код выглядит так:

import numpy as np # import numpy library
import pandas as pd # import pandas library
from scipy import optimize # import optimize from scipy library
from KF_GATSM import KF_GATSM # import script with Kalman filter

yields=pd.read_excel('data.xlsx',index_col=None,header=None) # Import observed yields
Omega0=pd.read_excel('parameters.xlsx') # Import initial parameters

# Function to optimize
def GATSM(Omega,yields,N):

     # recover parameters
     Omega=np.matrix(Omega)
     muQ,muP=parametrization(N,Omega) # run parametrization

Y=muQ+muP # or any other function

return Y

# Parametrization of the function
def parametrization(nstate,N,Omega):

     muQ=np.matrix([[Omega[0,0],0,0]]).T # intercept risk-neutral world
     muP=np.matrix([[Omega[1,0],Omega[2,0],Omega[3,0]]]).T # intercept physical world

     return muQ,muP

# Run optimization
def MLE(data,Omega0):

    # extract number of observations and yields maturities
    N=np.shape(yields)[1]

    # local optimization
     omega_opt=optimize.fmin(GATSM,np.array(Omega0)[:,0],args=(yields,N)) 

    return Y

1 Ответ

0 голосов
/ 05 февраля 2020

Я решил проблему. Кажется, что я не могу выбрать элемент массива в Scipy следующим образом (хотя он работает в Numpy):

Omega[0,0]
Omega[0]

Хитрость заключается в использовании:

Omega.item(0)
...