如何在python回归中修复“TypeError:只能将长度为1的数组转换为Python标量”

问题描述 投票:0回答:1

我尝试使用scipy.optimize包进行回归。该函数的模型在func中定义,参数名为coeffs。我想使用数据xdata和ydata来学习使用LS准则的参数。

我有以下TypeError:只有length-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]附近。

python-2.7 optimization scipy least-squares
1个回答
2
投票

不要使用from math import exp,用from numpy import exp替换它,以便正确处理数组:numpy.exp函数将返回scipy预期的数组,每个元素都转换为指数值。

© www.soinside.com 2019 - 2024. All rights reserved.