我正在使用statsmodels
库来表示通用似然模型。由于我有一个非常复杂的似然函数,我使用sympy
为我计算梯度和粗糙度。这样做很好,但是对于我的需求来说太慢了,因为似然函数包含术语b0*x0 + b1*x1 + ... + bn*xn
。这样,粗麻布大小增加了N^2
,复杂性也增加了。
粗麻布的元素通常非常相似,如expensive_operation * x0
和expensive_operation * x1
等。这意味着如果我可以预先计算expensive_operation
并在粗麻布函数中使用它,我会大幅提升业绩。
所以问题是 - 是否有一个工具可以获取功能列表,优化它们然后有效地评估它们?类似于numexpr
的东西可以使用功能列表吗?
答案 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])