如何在同情中优化粗麻布的评价?

时间:2014-01-18 20:26:18

标签: sympy statsmodels numexpr

我正在使用statsmodels库来表示通用似然模型。由于我有一个非常复杂的似然函数,我使用sympy为我计算梯度和粗糙度。这样做很好,但是对于我的需求来说太慢了,因为似然函数包含术语b0*x0 + b1*x1 + ... + bn*xn。这样,粗麻布大小增加了N^2,复杂性也增加了。

粗麻布的元素通常非常相似,如expensive_operation * x0expensive_operation * x1等。这意味着如果我可以预先计算expensive_operation并在粗麻布函数中使用它,我会大幅提升业绩。

所以问题是 - 是否有一个工具可以获取功能列表,优化它们然后有效地评估它们?类似于numexpr的东西可以使用功能列表吗?

1 个答案:

答案 0 :(得分:1)

SymPy有cse,代表共同的子表达式消除。请参阅the docs

一个简单的例子:

>>> 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])