2

我正在使用statsmodels通用似然模型的库。由于我有一个相当复杂的似然函数,我曾经sympy为我计算梯度和粗麻布。这很好用,但对我的需要来说太慢了,因为似然函数包含 term b0*x0 + b1*x1 + ... + bn*xn。这样,粗麻布尺寸就会增加,N^2复杂性也会增加。

expensive_operation * x0hessian 的元素通常与和等非常相似expensive_operation * x1。这意味着如果我可以预先计算expensive_operation并在 hessian 的函数中使用它,我将大大提高性能。

所以问题是 - 有没有一种工具可以列出功能,优化它们,然后有效地评估它们?类似numexprwhich 会列出功能的东西?

4

1 回答 1

2

SymPy has cse,它代表公共子表达式消除。请参阅文档

一个简单的例子:

>>> print(cse(sin(x**2)*cos(x**2) + 2*sin(x**2) - cos(x**2)))
([(x0, x**2), (x1, sin(x0)), (x2, cos(x0))], [x1*x2 + 2*x1 - x2])
于 2014-01-21T17:52:16.220 回答