我尝试使用 scipy.optimize.minimize 优化功能,但我无法弄清楚其中的位置,或者收到错误消息&#34 ; ValueError:使用序列设置数组元素" 或" TypeError:llf()需要1个位置参数但是2个被赋予"
我的代码如下:
import numpy as np
import pandas as pd
u = np.random.normal(0, 1, 50)
t = 25
x = t*u/(1-u)
x = np.sort(x, axis=0)
theta = list(range(1, 1001, 1))
theta = np.divide(theta, 10)
xv, tv = np.meshgrid(x, theta)
xt_sum = xv + tv # Each *theta* has been added to all values of *x*
xt_sum_inv = 1/xt_sum
xt_sum_n = np.sum(xt_sum_inv, axis=1) # This is a length 1000 vector where each entry is equal to sum(1/(theta + x))
def llf(arg):
return (-1 * (50/arg - 2 * xt_sum_n))
res = scipy.optimize.minimize(llf, theta, method='BFGS')
theta 是我想要优化的。
我觉得我的位置参数可能有错,或者我的变量或函数输出是错误的数据结构。任何帮助将不胜感激。
答案 0 :(得分:0)
scipy.optimize.minimize
最小化一个或多个变量的标量函数
上面的关键字是标量。你的函数不返回单个值(标量),但是很多,即它返回一个向量。
无论你想要实现什么,你使用错误的数字函数,或者你定义了错误的目标函数,即你的llf()
。