2012-12-13 34 views

回答

11

(因爲已經有很多在這個空間的更新在2017年後期更新。)

你最好的選擇可能是automatic differentiation。現在有很多這樣的軟件包,因爲它是深入學習的標準方法:

  • Autograd透明地工作與大多數numpy代碼。它是純Python,幾乎不需要修改典型函數的代碼,而且速度相當快。
  • 有許多可以做到這一點的面向深度學習的庫。 一些最受歡迎的是TensorFlow,PyTorch,Theano,ChainerMXNet。每一個都會要求你用他們那種類似numpy但是不必要的API來重寫你的函數,並且作爲回報,你會得到GPU支持和一些深入的學習導向的功能,你可能會也可能不會關心。
  • FuncDesigner是一個較舊的包,我沒有使用過它的網站目前停機。

另一個選擇是用finite differences近似它,基本上只是評估(f(x + eps) - f(x - eps))/(2 * eps)(但顯然比這更加努力)。這可能會比其他方法更慢,更不準確,特別是在中等高度的情況下,但是完全一般,不需要更改代碼。 numdifftools似乎是這個標準的Python包。

您也可以嘗試使用SymPy查找完全符號衍生物,但這將是一個相對手動的過程。

0

僅限於SciPy,我發現的最方便的方法是在合適的循環內找到scipy.misc.derivative,使用lambda來克服感興趣的功能。