优化Python多项式求值

优化Python多项式求值,python,optimization,polynomial-math,Python,Optimization,Polynomial Math,我有一个函数,它计算几个变量中多项式的项。输入是每个变量的幂的列表。例如,对于两个变量和二阶,它看起来是这样的 def f(x,y): return [1, x[1], y[1], x[1]*y[1], x[2], y[2]] x = [2**0, 2**1, 2**2] y = [3**0, 3**1, 3**2] >>> f(x,y) [1,2,3,6,4,9] 实际上,函数的阶数更高,有很多变量,因此平均有几千个项(事实上,我在运行时使用eval语句创建函数

我有一个函数,它计算几个变量中多项式的项。输入是每个变量的幂的列表。例如,对于两个变量和二阶,它看起来是这样的

def f(x,y):
    return [1, x[1], y[1], x[1]*y[1], x[2], y[2]]

x = [2**0, 2**1, 2**2]
y = [3**0, 3**1, 3**2]

>>> f(x,y)
[1,2,3,6,4,9]
实际上,函数的阶数更高,有很多变量,因此平均有几千个项(事实上,我在运行时使用eval语句创建函数,但这并不重要)。该功能位于最内部环路上,目前是速度瓶颈。探查器告诉我,我大部分时间都花在

除了创建一个C扩展模块之外,还有人能看到任何优化的空间吗

Edit:上面的例子试图用
x=2
y=3
计算
1+x+y+xy+x^2+y^2
,除了不添加它们之外,只需将每个术语放在一个列表中

将它们相加是很好的(有一些系数A,B,…),也就是说,我要做的就是计算:


A+B*x+C*y+D*x*y+E*x^2+F*y^2

我不确定从哪个版本开始,但是numpy应该在模块中包含一个函数,这将完全适用于您的示例

您似乎有兴趣将示例扩展到更高的维度

在同一个模块中,有一个,如果这还不够的话,我建议(我想你已经在做了)看看这个。实施最适合您的需求的内容应该不会太难,您可以随时在此询问:)

该功能位于最内部环路上,当前为速度 瓶颈


通过使用NumPy并用更高维的数组替换变量,您可以尝试完全摆脱循环。

使用类似或相同的参数调用函数的频率有多高?我真的不确定您的脚本是做什么的,但您尝试过研究scipy/NumPy吗?@NolenRoyalty问得好,不幸的是,答案是每个变量每次都是不同的。是否可以使用递归来描述函数,从而可以缓存以前的值以计算将来的值?@NolenRoyalty Hmm。。。我不认为缓存任何东西都会有帮助,每次一个新的x,y,等等。。。一个好主意,但我不知道x,y等的下一个值。。。直到我对函数求值之后,我才能对它进行矢量化。啊哈,这确实有帮助。我要找的是一种叫做。其思想是,不是计算1+x+y+x^2+y^2+xy,而是计算1+y(1+y)+x(1+x+y),它涉及的操作更少。