python scipy минимизировать ValueError

Я пытаюсь использовать scipy минимизацию и сталкиваюсь с ошибкой ValueError, которую я просто не могу понять.

У меня есть целевая функция f, как определено ниже, которая принимает два входа. Если я определяю два входа со случайными числами и вызываю функцию, она, кажется, хорошо оценивает.

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

Но когда я пытаюсь использовать минимизацию, я получаю ValueError:

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

Я не могу понять, расстраивается ли минимизация формой / размером x0 или sigma. Любая помощь будет очень высоко ценится!

Эрик


person Eric Gross    schedule 13.11.2016    source источник
comment
Попробуйте args=(sigma,). Убедитесь, что вы дали args кортеж. Без , () ничего не делает.   -  person hpaulj    schedule 14.11.2016
comment
Я бы поцеловал тебя, если бы мог. Спасибо!!   -  person Eric Gross    schedule 14.11.2016


Ответы (1)


Скопировано из моего комментария, поэтому его можно пометить как закрытое

Попробуйте args = (sigma,). Убедитесь, что вы указали кортеж args. Без () ничего не делает.

person hpaulj    schedule 14.11.2016