python - 类型错误 : can't multiply sequence by non-int of type 'numpy.float64' when trying to solve a 2nd degree polynomial

标签 python python-2.7 numpy matplotlib

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

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

y1=p[0]*x+p[1] TypeError: can't multiply sequence by non-int of type 'numpy.float64''

我想我明白出现此错误消息是因为它不喜欢 [ ],但这就是我之前的做法,所以我不知道? 我对方程式进行了一些修改,试图让它发挥作用,但没有任何办法使它正确。

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()

我希望生成一个图表,绘制实际数据并在顶部绘制一条直线,表示多项式拟合。

最佳答案

您的方法有两个问题:

  • 您正在使用(并且也需要)二阶拟合,但根据系数计算线性拟合。
  • 您的 x 和 y 值是元组,不能与 float 相乘。您可以将它们乘以整数,但这会将元组重复整数次。这不是你想要的。

一种解决方案是将 x 和 y 值转换为允许向量化运算的 NumPy 数组,然后使用二阶方程来计算 y1。以下是完整的答案。

<小时/>
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')

enter image description here

更好的替代方案是使用poly1d从系数创建多项式。这避免了手动编写整个方程。然后,您可以使用它来计算给定 x 值的多项式:

p = np.poly1d(np.polyfit(x,y,2))
y1 = p(x)

关于python - 类型错误 : can't multiply sequence by non-int of type 'numpy.float64' when trying to solve a 2nd degree polynomial,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55891987/

相关文章:

python - 使用 WebKitGTK+ 等待网站完全加载

numpy - 如何设置numpy浮点精度?

python - 计算 nd 数组中相同子数组的最快方法?

python - Django makemessages 写假文件

python - 减少箱线图 matplotlib 内的空间

Python:将字符串解析为数组

python - 如何在 python 2.7 中从列表中迭代和提取数据

python - 索引错误: list index out of range for the caesar cipher

python - 加速 Python 2.7 中的函数

python - 如何检查两个数据集匹配列之间的相关性?