Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类型错误:can';t将序列乘以类型为'的非整数;numpy.float64';当试图求解二次多项式时_Python_Python 2.7_Numpy_Matplotlib - Fatal编程技术网

Python 类型错误:can';t将序列乘以类型为'的非整数;numpy.float64';当试图求解二次多项式时

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

这个问题需要创建一个适合某些数据的二次多项式,然后打印出系数。我必须绘制原始数据,并将多项式拟合叠加在同一个图中

我以前做过一个几乎相同的问题,但没有问题,所以我有点想知道为什么它不起作用。 错误消息指出:

y1=p[0]*x+p[1] TypeError:无法将序列与“numpy.float64”类型的非int相乘

我想我理解出现这个错误消息是因为它不喜欢[],但我以前就是这样做的,所以我不知道? 我把这个方程式弄乱了一点,试图让它起作用,但没有什么能使它正确

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值是元组,不能与浮点相乘。您可以将它们乘以整数,但这会将元组重复整数次。这不是你想要的
一种解决方案是将x和y值转换为允许矢量化操作的NumPy数组,然后使用二阶方程计算
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)