2016-11-13 1 views
1

J'essaie d'utiliser scipy minimiser et de courir dans une erreur ValueError que je n'arrive pas à comprendre.python scipy minimiser ValueError

J'ai une fonction objectif f telle que définie ci-dessous, qui prend deux entrées. Si je définis les deux entrées avec des nombres aléatoires, et appelez la fonction, il semble évaluer très bien.

import numpy as np 
import pandas as pd 
from scipy.optimize import minimize 

sigma = pd.DataFrame(np.random.randn(7, 7), columns=list('ABCDEFG')) 
x0 = np.random.randn(7) 

def f(x, sigma): 
    result = 0.0 
    sigmaX = sigma.dot(x) 

    for i in range(len(x)): 
     for j in range(len(x)): 
      result = result + (x[i] * sigmaX[i] - x[j]*sigmaX[j])**2 

    return result 


In [387]: f(x0, sigma) 
Out[387]: 371.67951578983951 

Mais quand j'essaie d'utiliser minimiser, je reçois un ValueError:

In [389]: minimize(f, x0, args=(sigma)) 
ValueError: Wrong number of items passed 1, placement implies 7 

je ne peux pas savoir si minimiser est bouleversé la forme/taille de x0 ou sigma. Toute aide sera la bienvenue!

Eric

+0

Essayez 'args = (sigma,)'. C'est à dire assurez-vous de donner un argument à 'args'. Sans le ',' le '()' ne fait rien. – hpaulj

+0

Je t'embrasserais si je le pouvais. Je vous remercie!! –

Répondre

0

Copié de mon commentaire, il peut donc être marqué comme fermé

Essayez args = (Sigma,). C'est s'assurer que vous donnez un argument à un argument. Sans le, le() ne fait rien.