2017-10-05 3 views
0

Je suis confronté à un peu de problème lors de l'implémentation de scipy.optimize.minimize(). Il me renvoie l'erreur ValueError: Objective function must return a scalar. Voici mon code:Problème d'implémentation de scipy optimiser minimiser

def cost(A,b,x): 
    return np.sum(np.square(np.dot(A,x)-b)) 

def sse(x): 
    return 1-sum(x) 

x0 = np.ones(4)/4 
bounds = tuple((0,1) for x in x0) 
cons = ({'type': 'eq', 'fun': sse}) 
All = minimize(cost, x0, args=(A, curve), method='SLSQP', bounds=bounds, constraints=cons).x 

A a une forme (400,4), curve a une forme (400,) et x, x0 ont une forme (4,). Je semble manquer quelque chose de très trivial. Toute aide serait appréciée. Merci d'avance!

Répondre

0

La signature de votre fonction pour minimiser les besoins x en tant que premier paramètre non-mot-clé; alors les autres pourraient suivre.

(donc en interne votre mappage variable a été mal et donc vos formes sont un autre produisent forme de résultat qui est non scalaire)

Je ne vois pas aussi l'utilisation de curve dans votre code! Probablement curve = b?

Il suffit donc de changer:

def cost(A,b,x): # WRONG 
    return np.sum(np.square(np.dot(A,x)-b)) 

def cost(x, A, b): # CORRECT 
    return np.sum(np.square(np.dot(A,x)-b)) 
+0

Merci! Je l'ai. De plus, la 'courbe' est passée à la variable' b' dans la fonction. –

+0

Oui, mais je ne voudrais pas ces différents noms. C'est difficile de suivre imho. – sascha

+0

Aah! Bien! Cela en tiendra compte. –