Использование Scipy Optimize Minimize

Я пытаюсь оптимизировать функцию с помощью scipy.optimize.minimize, но я не могу понять, что куда идет, в качестве альтернативы получаю сообщения об ошибках "ValueError: установка элемента массива с последовательностью " или " TypeError: llf () принимает 1 позиционный аргумент, но было дано 2 "

Мой код следующий:

import numpy as np
import pandas as pd

u = np.random.normal(0, 1, 50)
t = 25
x = t*u/(1-u)
x = np.sort(x, axis=0)

theta = list(range(1, 1001, 1))
theta = np.divide(theta, 10)
xv, tv = np.meshgrid(x, theta)
xt_sum = xv + tv # Each *theta* has been added to all values of *x*
xt_sum_inv = 1/xt_sum
xt_sum_n = np.sum(xt_sum_inv, axis=1) # This is a length 1000 vector where each entry is equal to sum(1/(theta + x))

def llf(arg):
    return (-1 * (50/arg - 2 * xt_sum_n))

res = scipy.optimize.minimize(llf, theta, method='BFGS')

theta - это то, для чего я пытаюсь оптимизировать.

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


person DDoubleU    schedule 10.03.2016    source источник


Ответы (1)


Из документации,

scipy.optimize.minimize

Минимизация скалярной функции одной или нескольких переменных

Ключевое слово выше - скаляр. Ваша функция возвращает не одно значение (скаляр), а множество, т.е. возвращает вектор.

Чего бы вы ни пытались достичь, вы используете неправильную числовую функцию или определяете неправильную целевую функцию, то есть ваш llf().

person gg349    schedule 10.03.2016