Документация 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)
.