优化Python多项式评估

时间:2012-04-08 07:45:57

标签: 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语句创建函数,但这并不重要)。该功能位于最内层循环上,目前是速度瓶颈。剖析器告诉我,我大部分时间都在__times__。

如果没有创建C扩展模块,任何人都可以看到任何优化空间吗?

修改:上面的示例尝试使用1 + x + y + xy + x^2 + y^2x = 2来评估y = 3,除非不添加它们,只需将每个字词放在列表中。

添加它们很好(有一些系数A,B,......),即我想要做的就是计算:

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

2 个答案:

答案 0 :(得分:3)

我不确定从哪个版本开始,但numpy应该在polyval2d(x,y,c)模块中有一个polynomial函数,这将完全适用于您的示例。

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

在同一个模块中有一个polyval3d(x,y,z,c),如果不是我想的那样(我猜你已经在做了)看source code。实现最适合您需求的东西应该不会太难,您可以随时询问SO :)。

答案 1 :(得分:0)

  

该功能位于最内层循环上,目前是速度   瓶颈。

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