Не понимаю синтаксис scipy.optimize.brute - PullRequest
0 голосов
/ 02 февраля 2020

Я вообще не понимаю синтаксис scipy.optimize.brute. Если у меня есть список, скажем [-1, 0, 1], и одномерная функция x**2, как мне заставить его свернуть этот список? Я прочитал документацию , и я не знаю, что передать. Кортежи не работают, как и списки, и я не знаю, что такое «объект среза» или почему ему передаются два объекта среза.

MWE:

import scipy.optimize as spopt

def f(x):
    return x**2

print(spopt.brute(f, ([-1, 0, 1])))

дает мне TypeError: object of type 'int' has no len()

1 Ответ

0 голосов
/ 02 февраля 2020

scipy.optimize.brute минимизирует функцию в заданном диапазоне.
Ошибка зависит от способа передачи аргументов ranges. Как указано в документации:

Каждый компонент кортежа диапазонов должен быть либо «объектом среза», либо кортежем диапазона формы (низкий, высокий).

Вот пример.

>>> res = spopt.brute(func=f, ranges=(slice(-1,2,1),), full_output=True)
>>> res
(array([ 0.]), 0.0, array([-1,  0,  1]), array([1, 0, 1]))
>>> res[0]
array([ 0.]) # global minimum
>>> res[1]
0.0 # function value at global minimum
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...