我正在NumPy中使用多项式,我想知道使用多项式对象和np.polyval函数在特定值处计算多项式之间的区别。例如,这两个代码片段之间的区别是什么:
equation = np.poly1d(coeff_list)
x = equation(z)
x = (np.polyval(equation, z))
在这里,方程是一个多项式对象,通过使用np.poly1d函数获得,z是我们想要计算多项式的值。两个代码片段将给予我相同的结果,但我对潜在的差异感到好奇。
有谁能解释一下这两种方法的区别吗?在某些情况下,一种方法比另一种更好吗?谢谢!
1条答案
按热度按时间pftdvrlh1#
poly1d
是一个类,所以eq
是该类的一个示例:eq
有一个__call__
方法(它是一个callable
),所以可以用作:polyval
是一个函数,其代码可以从文档页面中轻松读取:使用
poly1d
示例调用它与使用相同的系数列表(加上0)调用它相同:这是因为如果你迭代
eq
,你会得到它的系数:我无法立即找到
poly1d
的代码;但我怀疑它是相当直接的python。它甚至可能以与polyval
相同的方式计算多项式。直接使用eq(x)
稍微快一点,但这可能更多地是函数调用级别的结果,而不是真实的的计算差异。关于“
numpy.polynomial
是首选”的注解适用于polyval
和poly1d
。如果你想用多项式或更一般的类型做一些花哨的事情,它可能是首选,但对于系数列表的简单计算,我看不出有多大优势。下面是
polyval
的代码:编辑
poly1d
的call
方法实际上是对polyval
的调用:这些都在
np.lib.polynomial.py
文件中