【问题标题】:TypeError: can't multiply sequence by non-int of type 'numpy.float64' when trying to solve a 2nd degree polynomialTypeError:尝试求解二次多项式时,无法将序列乘以“numpy.float64”类型的非整数
【发布时间】:2019-09-17 09:45:42
【问题描述】:

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

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

y1=p[0]*x+p[1] TypeError:不能将序列乘以“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()

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

【问题讨论】:

  • 你确实意识到二次多项式意味着你有 ax^2+bx+c 拟合。那你为什么要使用线性拟合 p[0]*x+p[1].

标签: python python-2.7 numpy matplotlib


【解决方案1】:

你的方法有两个问题:

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

一种解决方案是将 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')

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

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

【讨论】:

    【解决方案2】:

    问题在于表达式p[0]*x 这个表达式的参数类型分别是浮点数和元组(序列)。没有与这些参数匹配的乘法运算。 最接近的匹配是将一个序列乘以一个整数(这会创建一个新的、更长的序列)。这就是您看到的错误的原因。

    您可能想使用一个 numpy 数组。 将 numpy 数组乘以浮点数将每个元素相乘。 示例:

    x = np.array([1, 2, 3])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-28
      • 1970-01-01
      • 2019-09-08
      • 2022-11-02
      • 1970-01-01
      • 2010-11-15
      相关资源
      最近更新 更多