Numpy多项式.Polynomial.fit()给出的系数与多项式.Polyfit()不同

numpy polynomial.Polynomial.fit() gives different coefficients than polynomial.polyfit()(Numpy多项式.Polynomial.fit()给出的系数与多项式.Polyfit()不同)
本文介绍了Numpy多项式.Polynomial.fit()给出的系数与多项式.Polyfit()不同的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不明白为什么polynomial.Polynomial.fit()给出的系数与预期系数相差很大:

import numpy as np

x = np.linspace(0, 10, 50)
y = x**2 + 5 * x + 10

print(np.polyfit(x, y, 2))
print(np.polynomial.polynomial.polyfit(x, y, 2))
print(np.polynomial.polynomial.Polynomial.fit(x, y, 2))

给予:

[ 1.  5. 10.]
[10.  5.  1.]
poly([60. 75. 25.])

前两个结果都是正常的,感谢this answer我理解了为什么这两个数组的顺序相反。

然而,我不明白第三个结果的意义。系数看起来是错的,虽然我用这种方法得到的多项式似乎给出了正确的预测值。

推荐答案

当然,答案稍微隐藏在文档中。查看class numpy.polynomial.polynomial.Polynomial(coef, domain=None, window=None) 显然,一般而言,系数[abc,...]是关于多项式a + b * x + c * x**2 + ...的。但是,关键字参数domainwindow都是缺省的[-1,1]。我不喜欢那个课程,所以我不确定目的是什么,但很明显,重新映射发生了。现在,在polynomial.Polynomial.fit()的情况下,我们有一个类方法,它自动接受x数据作为域,但仍然映射到窗口。因此,在OP中[0-10]被映射到[-1,1]。这是由x = x' / 5 - 1x' -> 5 * x + 5完成的。把后者放在运算多项式中,我们得到

( 5 x' + 5 )**2 + 5 * ( 5 * x' + 5 ) + 10 = 25 * x'**2 + 75 * x' + 60

哇!

要获得预期结果,必须将

print(np.polynomial.polynomial.Polynomial.fit(x, y, 2, window=[0, 10] ) )

其中

poly([10.  5.  1.])

这篇关于Numpy多项式.Polynomial.fit()给出的系数与多项式.Polyfit()不同的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)