我正在尝试学习 Python 中的优化,所以我编写了一些代码来测试 fmin 函数。
但是我不断收到以下错误:
ValueError: operands could not be broadcast together with shapes (1,2) (100,)
我可以说这个问题与我的论点有关,但我不确定如何纠正它。我也尝试定义一个函数,而不是一个 lambda 函数,但我仍然得到同样的错误。
我确定这是非常基本的东西,但我似乎无法理解。任何帮助将不胜感激!
import numpy as np
import pandas as pd
from scipy.stats.distributions import norm
from scipy.optimize import fmin
x = np.random.normal(size=100)
norm_1 = lambda theta,x: -(np.log(norm.pdf(x,theta[0],theta[1]))).sum()
def norm_2(theta,x):
mu = theta[0]
sigma = theta[1]
ll = np.log(norm.pdf(x,mu,sigma)).sum()
return -ll
fmin(norm_1,np.array([0,1]),x)
fmin(norm_2,np.array([0,1]),x)