python - scipy.optimize curve_fit 返回错误值

标签 python scipy curve-fitting

我试图用 scipy 拟合一个特定的函数,但我得到了奇怪的结果。我决定测试一些我知道答案的东西,所以我创建了这个:

from scipy.optimize import curve_fit as cf
import numpy as np
import random

def func(x,a):
    return a+X

X =[]
for i in range (10):
    V = random.random()
    X.append(i+3 + V/10)

print cf(func, np.array(range(10)),np.array(X))

我希望得到 3 左右的结果,然而,这里的输出是:

(array([ -2.18158824e-12]), inf)

作为旁注,我试图查看我向 func 发送了什么,我得到了这个:

print func(np.array(range(10)),3)

Traceback (most recent call last):
  File "/tmp/py1759O-P", line 16, in <module>
    print func(np.array(range(10)),3)
  File "/tmp/py1759O-P", line 6, in func
    return a+X
TypeError: unsupported operand type(s) for +: 'int' and 'list

我做错了什么?

最佳答案

不要使用 xX 作为变量名,因为它们具有如此不同的含义(或者您可能不知道 Python 区分大小写?):

def func(x,a):
    return a+X

X =[]

x 是一个 numpy 数组,X 是一个列表,a 是一个标量参数值。

a+X 会导致错误,因为您无法将标量添加到列表中。

关于python - scipy.optimize curve_fit 返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12303794/

相关文章:

python - 使用可为空整数数据类型创建 pandas DataFrame

python - python3中的高效位交换

java - 使用 Apache Maths (Java) 的多项式回归强制在 (0,0) 处截距

python - scipy.interpolate.griddata : cut z-value and get area inside it

python - Python numpy 中的无循环卡方网格搜索

r - 在R中绘制曲线时,曲线的一部分被切断,不知道为什么

python - 从列表列表创建新列表并在 Python 中精确打印

python - 在穿过多边形的每个点处分割线串

python - 使用 scipy.interpolate.splrep 函数

python - scipy.interpolate.UnivariateSpline 中的 bbox agrument 是做什么的?