【问题标题】:python - curve_fit - A non-int/float errorpython - curve_fit - 非整数/浮点错误
【发布时间】:2013-09-07 00:32:14
【问题描述】:
import numpy as np
from scipy.optimize import curve_fit

x1 = [0.25, 0.33, 0.40, 0.50, 0.60, 0.75, 1.00]
y1 = [1.02, 1.39, 1.67, 1.89, 2.08, 2.44, 2.50]

def mmfunc(x1, d, e):
    return d*x1/(e + x1)

y2 = mmfunc(x1,6.0,1.0)

popt, pcov = curve_fit(mmfunc, x1, y1)

我收到此错误

TypeError: can't multiply sequence by non-int of type 'float'

(x1 是一个数组(浮点数),d, e 是浮点数)

(我尝试从文件中读取值,打印出值(它们是浮点数)... 我尝试了一个更简单的功能 - 似乎没有任何效果!)

【问题讨论】:

  • 异常有什么不清楚的地方?
  • 你能用问题的形式来表达吗?
  • 问题是“x1 是一个数组(浮点数)”是不正确的。不要只是假设它是您想要的,而应该是您检查的第一件事。例如,print(type(x1)) 会立即告诉您它实际上是 builtins.list,而不是 numpy.ndarray。因此,您不能对其使用特定于数组的操作。

标签: python scipy


【解决方案1】:

问题是您没有将列表转换为 numpy 数组,因此您无法添加或乘以标量。这似乎对我有用:

import numpy as np

x1 = np.array([0.25, 0.33, 0.40, 0.50, 0.60, 0.75, 1.00], dtype="float")
y1 = np.array([1.02, 1.39, 1.67, 1.89, 2.08, 2.44, 2.50], dtype="float")

def mmfunc(x1, d, e):
    return d*x1/(e + x1)

y2 = mmfunc(x1,6.0,1.0)

(注意:我没有安装scipy,因此我无法检查curve_fit 函数是否有效,但转换为np.array 修复了与列表上的算术相关的异常。)

【讨论】:

  • 谢谢 - 是的,我确实检查了(所以我认为)x1 和 y1 ......当我打印 x1 时 - 得到了一系列数字(浮点数)......但是是的,这有效 - 明确将它们声明为浮点数 - 再次感谢 ...
  • 请注意:此更改不是将它们声明为浮点数,而是将 Python list 对象转换为 numpy.array 对象。这是两个不同的东西,不支持相同的操作!另外,如果我的回答有帮助,请考虑将其标记为“已接受”以让其他人知道。 :)
猜你喜欢
  • 2018-06-16
  • 2021-06-15
  • 2015-01-05
  • 1970-01-01
  • 2017-07-26
  • 2020-07-26
  • 1970-01-01
  • 1970-01-01
  • 2017-12-17
相关资源
最近更新 更多