TypeError:“浮动”对象在scipy最小化期间​​无法下标

时间:2018-09-17 17:00:34

标签: python python-3.x numpy scipy numba

我正在尝试估计python中的最大似然模型。我同时设置了似然函数和解析雅可比。当我运行scipy minimum时,出现一个奇怪的错误(如下所示)。当我省略jacobian时似乎不会发生此错误,但是我不知道为什么。

from numpy import log,sum,var
from numba import njit

@njit
def log_likelihood(params,surg_fx,surg_fx_ses):
    mu_var = params[0]
    exp_var = mu_var + surg_fx_ses**2
    log_lik = -((surg_fx)**2 / (2*exp_var)) - .5*log(exp_var)
    neg_sum_log_lik = -sum(log_lik)
    print(mu_var)
    print(neg_sum_log_lik)
    if np.isnan(neg_sum_log_lik):
        return 1e20
    else:
        return neg_sum_log_lik

@njit
def log_lik_jac(params,surg_fx,surg_fx_ses):
    mu_var = params[0]
    exp_var = mu_var + surg_fx_ses**2
    jc = -sum(((surg_fx)**2 / (2*(exp_var**2))) - (.5/exp_var))
    print(mu_var)
    print(jc)
    return jc

x0 = [np.var(cost_params3)]
shrinkage_est = minimize(log_likelihood,x0,args=(cost_params3,cost_SEs3),jac=log_lik_jac,options={'disp':True},method='BFGS')

cost_params3cost_SEs3是(205,)形的numpy数组。

返回的是:

0.10423462356390442
-580.1534424527905
0.10423462356390442
-67.02947836460727
[ 1.11423462]
26.84532144252225
[ 1.11423462]
77.95606471086792
[ 0.3741784]
-54.28224588483895
[ 0.3741784]
150.90730570822998
[ 0.19152581]
-79.19268133113846
[ 0.19152581]
68.81484893304786
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/anaconda3/lib/python3.5/site-packages/scipy/optimize/_minimize.py", line 444, in minimize
    return _minimize_bfgs(fun, x0, args, jac, callback, **options)
  File "/usr/local/anaconda3/lib/python3.5/site-packages/scipy/optimize/optimize.py", line 973, in _minimize_bfgs
    A1 = I - sk[:, numpy.newaxis] * yk[numpy.newaxis, :] * rhok
TypeError: 'float' object is not subscriptable

我不太确定为什么要运行几次迭代而最终失败,特别是考虑到这里没有下标。我也不确定为什么它似乎在第一次迭代后就成为列表了?我尝试在不使用numba的情况下运行它,但它在同一位置停了下来,但出现了另一个错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/anaconda3/lib/python3.5/site-packages/scipy/optimize/_minimize.py", line 444, in minimize
    return _minimize_bfgs(fun, x0, args, jac, callback, **options)
  File "/usr/local/anaconda3/lib/python3.5/site-packages/scipy/optimize/optimize.py", line 973, in _minimize_bfgs
    A1 = I - sk[:, numpy.newaxis] * yk[numpy.newaxis, :] * rhok
IndexError: invalid index to scalar variable.

任何帮助将不胜感激!

0 个答案:

没有答案