2012-11-07 60 views
1
""" ___ """ 
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) 

产生ValueError:使用序列设置数组元素。 SciPy的减少

ValueError: setting an array element with a sequence. 

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

回答

3

由于目标函数是一个向量函数(取入一个向量,返回一个向量),但根据scipy.optimize.minimize documentation它只需要标量函数(需要一个向量返回一个标量。)

+0

看看scipy.optimize.root函数,而不是scipy.optimize.minimize函数 – Covich

相关问题