使用Scipy Optimize最小化

时间:2016-03-10 17:38:51

标签: python numpy optimization scipy minimize

我尝试使用 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 是我想要优化的。

我觉得我的位置参数可能有错,或者我的变量或函数输出是错误的数据结构。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

来自documentation

  

scipy.optimize.minimize

     

最小化一个或多个变量的标量函数

上面的关键字是标量。你的函数不返回单个值(标量),但是很多,即它返回一个向量。

无论你想要实现什么,你使用错误的数字函数,或者你定义了错误的目标函数,即你的llf()