Python 类型错误:can';t将序列乘以类型为'的非整数;numpy.float64';当试图求解二次多项式时
这个问题需要创建一个适合某些数据的二次多项式,然后打印出系数。我必须绘制原始数据,并将多项式拟合叠加在同一个图中 我以前做过一个几乎相同的问题,但没有问题,所以我有点想知道为什么它不起作用。 错误消息指出: y1=p[0]*x+p[1] TypeError:无法将序列与“numpy.float64”类型的非int相乘 我想我理解出现这个错误消息是因为它不喜欢[],但我以前就是这样做的,所以我不知道? 我把这个方程式弄乱了一点,试图让它起作用,但没有什么能使它正确Python 类型错误:can';t将序列乘以类型为'的非整数;numpy.float64';当试图求解二次多项式时,python,python-2.7,numpy,matplotlib,Python,Python 2.7,Numpy,Matplotlib,这个问题需要创建一个适合某些数据的二次多项式,然后打印出系数。我必须绘制原始数据,并将多项式拟合叠加在同一个图中 我以前做过一个几乎相同的问题,但没有问题,所以我有点想知道为什么它不起作用。 错误消息指出: y1=p[0]*x+p[1] TypeError:无法将序列与“numpy.float64”类型的非int相乘 我想我理解出现这个错误消息是因为它不喜欢[],但我以前就是这样做的,所以我不知道? 我把这个方程式弄乱了一点,试图让它起作用,但没有什么能使它正确 x=(0.0,0.45,0.89
x=(0.0,0.45,0.89,1.34,1.79,2.24,2.69,3.14,3.59,4.04,4.49,4.94,5.39,5.83,6.28)
y=(0.36,0.30,0.311,0.09,0.51,0.55,1.10,1.11,1.45,1.74,2.30,2.52,3.26,3.69,4.12)
r,s=st.pearsonr(x,y)
print'The Pearson Correlation Coefficient of this polynomial is',r
p=np.polyfit(x,y,2)
y1=p[0]*x+p[1]
plt.plot(x,y1,'-r')
plt.plot(x,y,'o')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Polynomial')
plt.show()
我希望生成一个图形,绘制实际数据,并在顶部绘制一条直线,表示多项式拟合。问题在于表达式
p[0]*x
这个表达式的参数类型分别是float和tuple(sequence)。没有与这些参数匹配的乘法运算。
最接近的匹配是将一个序列乘以一个整数(这将创建一个新的、更长的序列)。这就是您看到的错误的原因
您可能需要使用numpy数组。
将numpy数组乘以一个浮点数将使每个元素相乘。
例如:
您的方法存在两个问题:
- 您正在使用(也希望使用)二阶拟合,但从系数计算线性拟合
- x和y值是元组,不能与浮点相乘。您可以将它们乘以整数,但这会将元组重复整数次。这不是你想要的
y1
。下面是一个完整的答案
更好的选择是使用
poly1d
从系数创建多项式。这样可以避免手动编写整个方程式。然后,您可以使用它为给定的x
值计算多项式,如下所示
p = np.poly1d(np.polyfit(x,y,2))
y1 = p(x)
你知道二次多项式意味着你有ax^2+bx+c拟合。那么为什么要使用线性拟合p[0]*x+p[1]。
import numpy as np
import matplotlib.pyplot as plt
x = np.array([0.0,0.45,0.89,1.34,1.79,2.24,2.69,3.14,3.59,4.04,4.49,4.94,5.39,5.83,6.28])
y = np.array([0.36,0.30,0.311,0.09,0.51,0.55,1.10,1.11,1.45,1.74,2.30,2.52,3.26,3.69,4.12])
p = np.polyfit(x,y,2)
y1 = p[0]*x**2+p[1]*x+p[2]
plt.plot(x,y1,'-r')
plt.plot(x,y,'o')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Polynomial')
p = np.poly1d(np.polyfit(x,y,2))
y1 = p(x)