私は本当にnumpy.gradient
関数は、多変数関数勾配の計算にそれを使用する方法を実行します。
たとえば、私はそのような機能を持っています:
def func(q, chi, delta):
return q * chi * delta
3次元の勾配を計算する必要があります(つまり、すべての変数(q、chi、delta)について偏導関数を計算する必要があります)。
NumPyを使用してこの勾配を計算するにはどうすればよいですか?
問題は、numpyが導関数を直接与えることができず、2つのオプションがあることです。
NUMPYを使用
基本的にあなたがしなければならないことは、3次元でグリッドを定義し、このグリッド上の関数を評価することです。その後、この関数値のテーブルをnumpy.gradient
は、すべての次元(変数)の数値微分を持つ配列を取得します。
here の例:
from numpy import *
x,y,z = mgrid[-100:101:25., -100:101:25., -100:101:25.]
V = 2*x**2 + 3*y**2 - 4*z # just a random function for the potential
Ex,Ey,Ez = gradient(V)
NUMPYなし
centered difference quotient を使用して、導関数を自分で計算することもできます。
これは基本的に、numpy.gradient
実行中 事前定義されたグリッドのすべてのポイントに対して。
また、theano
は勾配を自動的に計算できます
http://deeplearning.net/software/theano/tutorial/gradients.html
f = lambda x: x**2
approx_fprime(np.array([2]), f, epsilon=1e-6) # array([ 4.000001])
Numpyは、ポイントのグリッド全体を作成せずに勾配計算を直接サポートしません。代わりに、私は autodifferentiation を使用します https://code.activestate.com/recipes/580610-auto-differentiation/ をPythonで行う方法を参照してください。