【问题标题】:How to optimize evaluation of hessian in sympy?如何在 sympy 中优化对 hessian 的评估?
【发布时间】:2014-02-08 04:09:27
【问题描述】:

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

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

所以问题是 - 有没有一种工具可以列出函数,优化它们,然后有效地评估它们? numexpr 之类的东西会包含函数列表?

【问题讨论】:

  • SymPy 有cse。这就是你要找的吗?
  • 正是我想要的。如果你把它写成普通的帖子,我会接受它。
  • 您还应该看看 Theano,以及 Theano/SymPy 集成。

标签: sympy statsmodels numexpr


【解决方案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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多