【发布时间】:2019-09-08 13:24:57
【问题描述】:
我正在尝试使用 matplotlib 和 scipy 在具有线性函数 (a*x+b) 的 .txt 文件中拟合和绘制简单数据。我遇到了有关测试功能的错误:"can't multiply sequence by non-int of type 'numpy.float64'"
我尝试更改变量名x,但遇到了同样的问题。大部分代码都来自一个工作代码,它能够毫无问题地对数据进行最佳拟合,并且对测试函数使用相同的定义。
import matplotlib.pyplot as plt
from scipy import optimize
import numpy as np
f=open("testData.txt","r")
x_data=[]
y_data=[]
trash=f.readline() #discards first line
for line in f: #reads x and y data from file
x_read,y_read=line.split()
x_data.append(float(x_read))
y_data.append(float(y_read))
def test_func(x, a, b):
return a*x+b
params, params_covariance = optimize.curve_fit(test_func, x_data, y_data,
p0=[1, 1])
plt.figure(figsize=(6, 4))
plt.scatter(x_data, y_data)
plt.plot(x_data, test_func(x_data, params[0], params[1]), label='Fitted
function')
plt.show()
这是错误:
Traceback(最近一次调用最后一次):
文件“C:/Users/Fra/Desktop/lab/ottica/2/reaqd.py”,第 19 行,在 plt.plot(x_data, test_func(x_data, params[0], params[1]), label='拟合函数')
文件“C:/Users/Fra/Desktop/lab/ottica/2/reaqd.py”,第 14 行,在 test_func 返回 a*x+b
TypeError: 不能将序列乘以“numpy.float64”类型的非整数
【问题讨论】:
-
在将列表传递给 test_func 之前将它们转换为 numpy ndarray。
标签: python matplotlib scipy data-fitting function-fitting