いくつかの変数の多項式の項を評価する関数があります。入力は、各変数の累乗のリストです。たとえば、2つの変数と2次の場合、次のようになります。
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
ますy = 3
。ただし、追加せずに、各用語をリストに追加するだけです。
それらを追加することは問題ありません(いくつかの係数A、B、...)。つまり、私がやろうとしているのは計算だけです。
A + B*x + C*y + D*x*y + E*x^2 + F*y^2
。