【发布时间】:2020-08-31 11:29:36
【问题描述】:
我使用 numpy 的 polyfit 来拟合一些嘈杂的数据,然后想使用 polyval 来评估一些新点的拟合。出于某种原因,拟合效果很好,但polyval 只有在我反转多项式系数的顺序时才会给出正确的结果:
import numpy as np
import numpy.polynomial.polynomial as poly
import matplotlib.pyplot as plt
# a noisy line
x = np.linspace(0, 10, 100)
y = x + np.random.normal(0, 1, x.shape)
# calculate fit polynomial
fit_coeffs_poly = poly.polyfit(x, y, deg=1)
fit_polynomial_poly = poly.Polynomial(fit_coeffs_poly)(x)
# plot to check fit
plt.plot(x, y, label='noisy')
plt.plot(x, fit_polynomial_poly, '-r', label='polyfit')
plt.legend(loc='lower right')
plt.show()
合身看起来不错:
polyval 仅在系数反转时有效:
>>> for i in range(0, 10):
>>> print(np.polyval(fit_coeffs_poly, i))
0.9792056688016727
1.139755470535941
1.3003052722702093
1.4608550740044774
1.6214048757387456
1.781954677473014
1.9425044792072823
2.1030542809415502
2.2636040826758186
2.424153884410087
>>> for i in range(0, 10):
>>> print(np.polyval(fit_coeffs_poly[::-1], i))
0.16054980173426825
1.139755470535941
2.1189611393376135
3.0981668081392866
4.077372476940959
5.056578145742631
6.035783814544304
7.0149894833459765
7.9941951521476495
8.973400820949323
我不禁觉得这在某种程度上是错误的,他们倒退是没有意义的。
【问题讨论】: