Numpy 如何在数值上近似函数的雅可比矩阵和海森矩阵?

Numpy 如何在数值上近似函数的雅可比矩阵和海森矩阵?,numpy,scipy,numerical,Numpy,Scipy,Numerical,我在Python中有一个函数: def f(x): return x[0]**3 + x[1]**2 + 7 # Actually more than this. # No analytical expression 它是一个向量的标量值函数 我如何用numpy或scipy的数值来近似该函数的雅可比数和海森数?(在2017年末更新,因为该空间有很多更新。) 你最好的选择可能是。现在有很多这样的软件包,因为这是深度学习的标准方法: 可以透明地处理大多数numpy代码。

我在Python中有一个函数:

def f(x):
    return x[0]**3 + x[1]**2 + 7 
    # Actually more than this.
    # No analytical expression
它是一个向量的标量值函数

我如何用numpy或scipy的数值来近似该函数的雅可比数和海森数?

(在2017年末更新,因为该空间有很多更新。)

你最好的选择可能是。现在有很多这样的软件包,因为这是深度学习的标准方法:

  • 可以透明地处理大多数numpy代码。它是纯Python,几乎不需要对典型函数进行代码更改,而且速度相当快
  • 有许多面向深度学习的图书馆可以做到这一点。 最受欢迎的有、、和。每种方法都需要您用类似numpy但不必要的不同API重写函数,作为回报,您将获得GPU支持和一系列面向深入学习的功能,这些功能您可能关心,也可能不关心
  • 是一个我没有使用过的旧软件包,其网站目前已关闭
另一种方法是近似计算,基本上只是计算
(f(x+eps)-f(x-eps))/(2*eps)
(但显然要付出更多的努力)。这可能会比其他方法更慢、更不准确,尤其是在中等高维的情况下,但它是完全通用的,不需要更改代码。似乎是这方面的标准Python包


您也可以尝试使用查找完全符号导数,但这将是一个相对手动的过程。

仅限于SciPy,我找到的最方便的方法是,在适当的循环中,使用lambdas来实现感兴趣的函数。

对于渐变,有
SciPy.optimize.optimize.approx\u fprime
,这只支持标量的标量函数吗?问题是关于向量的标量函数。回答得很好!快速更新:不再支持Theano。