scipy.optimize.least_squares возврат только решения - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь решить ряд линейных уравнений, используя функцию Оптимизация по квадрату Леста . Поскольку я должен использовать вектор решения x для дальнейших вычислений, я хочу вернуть только x, а не остальные. Я только начал использовать Python, поэтому понятия не имею, как я могу набрать код, чтобы я получал только x, а не весь возврат .

Я уже пробовал коды, такие как:

y= spo.least_squares(test_function, x0) [0]

но у меня ничего не получалось.

Не могли бы вы мне помочь?

1 Ответ

0 голосов
/ 26 апреля 2018

Документация scipy.optimize.least_squares гласит:

Возвращает: OptimizeResult со следующими определенными полями:

x : ndarray, форма (n,)

Решение найдено.

...

Это означает, что вам нужно получить доступ к полям результатов по имени. Чтобы получить только x, это должно работать:

y = spo.least_squares(test_function, x0).x

Однако я не хочу поощрять это использование. Если по какой-то причине оптимизация не удалась, вы никогда не узнаете. Поэтому, если вы абсолютно не уверены, что он не может выйти из строя, или вам все равно, если он потерпит неудачу, не используйте этот шаблон.

Лучше написать оболочку, которая занимается обработкой ошибок и перенаправляет x в случае успеха:

def my_lsq(*args, **kwargs):
    result = spo.least_squares(*args, **kwargs)

    if result.success:
        return result.x
    else:
        print(result)
        raise RuntimeError(result.message)

, который можно использовать просто как y = my_lsq(test_function, x0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...