我从一组点得到一个一次多项式(一条线),并使用line.deriv()得到导数,我期望de derivative是系数[1],但得到的却是一个不同的数字
x = [1, 2, 3]
y = [0.1, 0.3, 0.6]
line = np.polynomial.polynomial.Polynomial.fit(x, y, 1)
print(line)
print(line.deriv())
回馈:
poly([0.33333333 0.25 ])
poly([0.25])
这是对的但如果我再加一点
x = [1, 2, 3, 4]
y = [0.1, 0.3, 0.6, 0.7]
line = np.polynomial.polynomial.Polynomial.fit(x, y, 1)
print(line)
print(line.deriv())
回馈:
poly([0.425 0.315])
poly([0.21])
这似乎不对
我没看到什么?
2条答案
按热度按时间ecfsfe2w1#
您看到的是 * 缩放域 * 中的系数,参见文档的最后一段:
请注意,系数是在窗口与域之间的线性Map定义的缩放域中给出的。
convert
可用于获得未缩放数据域中的系数。为了得到“通常”的系数,你需要
这给出了预期的
[-0.1 0.21]
。顺便说一句,IPython显示了
line
的一个非常丰富的输出:wfauudbj2#
事实上,Stef的答案告诉您,系数是使用线性Map缩放的。您可以查看
deriv
的源代码。https://github.com/numpy/numpy/blob/8cec82012694571156e8d7696307c848a7603b4e/numpy/polynomial/_polybase.py#L882off, scl = self.mapparms()
off
和scl
分别表示偏移和缩放。因此,如果您希望获得例外的行为,则必须提供一个等于域的窗口,如下所示: