Как исправить «TypeError: только массивы длины 1 могут быть преобразованы в скаляры Python» в регрессии Python - PullRequest
0 голосов
/ 16 апреля 2019

Я пытался использовать пакет scipy.optimize для регрессии. Модель функции определена в func с параметрами, названными коэффициентами. Я хочу использовать данные xdata и ydata для изучения параметров с использованием критерия LS.

У меня есть следующая ошибка TypeError: только массивы длины 1 могут быть преобразованы в скаляры Python

from __future__ import division
import numpy
import scipy
from math import exp
import scipy.optimize as optimization

global m0,t0

t0 = 0.25
m0=1
def func(t, coeffs):
    a = coeffs[0]
    b = coeffs[1]
    m = (a/b + m0 )*exp(b*(t-t0))-a/b
    return m

# fitting test
x0 = numpy.array([5, -5], dtype=float)

def residuals(coeffs, y, t):
    return y - func(t, coeffs)

xdata = numpy.array([0.25,0.5,1])
ydata = numpy.array([1.0,0.803265329856,0.611565080074])

from scipy.optimize import leastsq
x = leastsq(residuals, x0, args=(ydata, xdata))

возвращаемые параметры ожидаются около [2, -1].

1 Ответ

2 голосов
/ 16 апреля 2019

Не используйте from math import exp, замените его на from numpy import exp, чтобы ваши массивы обрабатывались правильно: функция numpy.exp вернет массив, ожидаемый scipy, с каждым элементом, преобразованным в его экспоненциальное значение.

...