由于“无法将序列乘以'numpy.float64'类型的非int,因此无法拟合数据”错误

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

我正在尝试使用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中返回* x + b

TypeError:不能将序列乘以'numpy.float64'类型的非int

python matplotlib scipy data-fitting function-fitting
2个回答
0
投票

您可能正在尝试将Python列表乘以浮点数,这不起作用。试试a*np.array(x)+b


0
投票

当您询问接受的答案如何工作时,显示“老派”方式可能有其用途:

plt.plot(x_data, 
  [test_func(x, params[0], params[1]) for x in x_data],
  label='Fitted function')

x_data = []显然是一个列表,由于Python不是Matlab,number*x_data不是元素乘法,而是创建一个重复x_datanumber次的列表,需要一个整数。

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