ValueError:使用序列设置数组元素.scipy最小化

Dav*_*jad 1 python numpy scipy

""" ___ """
from scipy.optimize import minimize
import numpy as np


LENGTH = 100

def process(x):
    return x * 2 + 5

def draw(process, length):
    """ """
    y = np.random.normal(0, 10, length)
    data = [process(y_) for y_ in y]
    rnd = np.random.normal(3, 1, len(data))
    return y, rnd + data


def maximum_likelyhood(y, X):
    objective = lambda b: np.transpose(X) * (y - X * b)
    x0 = np.zeros(100)
    res =  minimize(objective, x0=x0)
    return res.x

y, X = draw(process, LENGTH)
print maximum_likelyhood(y, X)
Run Code Online (Sandbox Code Playgroud)

生产一个

ValueError: setting an array element with a sequence.
Run Code Online (Sandbox Code Playgroud)

有几个类似的问题,他们都指出x0不是一维数组,但这里是一维数组.(或不?如果请解释为什么以及如何使它成为1D)

小智 5

发生错误是因为目标函数是向量函数(接受向量,返回向量)但是根据scipy.optimize.minimize文档,它只需要标量函数(使用向量返回标量.)