我有一个函数可以评估多个变量中的多项式项。输入是每个变量的幂列表。例如,对于两个变量和二阶,它看起来像这样,
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^2
用x = 2
and进行评估y = 3
,除了不添加它们,只是将每个术语放在一个列表中。
添加它们很好(带有一些系数 A,B,...),即我要做的就是计算:
A + B*x + C*y + D*x*y + E*x^2 + F*y^2
.