sympy - 如何在 sympy 中优化 hessian 的评估?

标签 sympy statsmodels numexpr

我正在为通用似然模型使用 statsmodels 库。由于我有一个相当复杂的似然函数,我使用 sympy 为我计算梯度和 hessian。这工作正常,但对我的需要来说太慢了,因为似然函数包含项 b0*x0 + b1*x1 + ... + bn*xn。这样,hessian 大小会增加 N^2,复杂性也会增加。

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

所以问题是 - 是否有一种工具可以获取函数列表、优化它们然后有效地评估它们?像 numexpr 这样的函数列表?

最佳答案

SymPy 有cse,代表公共(public)子表达式消除。参见 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])

关于sympy - 如何在 sympy 中优化 hessian 的评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21209443/

相关文章:

python - 使用 SymPy 解析包含 N 的表达式

python - 使用 OLS 回归预测 future 值(Python、StatsModels、Pandas)

python - 在python中拟合负二项式

python - 运算符结果的 Numpy 总和,无需分配不必要的数组

python - 长尾小鹦鹉与 Numba 有何不同?因为我没有看到某些 NumPy 表达式有任何改进

python - 使用 sympy 简化嵌套指数和对数

python - sympy 表达式的 numpy 数组中某些符号的数值计算

python - SymPy:我可以安全地区分 atan2() 吗?

python - 逻辑回归得到 sm.Logit 值(python,statsmodels)

python - 将 boolean 公式映射到 Python 集合表达式