用NumPy计算梯度

Mik*_*rev 18 python gradient numpy scipy

我真的无法理解numpy.gradient函数是做什么以及如何使用它来计算多变量函数梯度.

例如,我有这样一个功能:

def func(q, chi, delta):
    return q * chi * delta
Run Code Online (Sandbox Code Playgroud)

我需要计算它的三维梯度(换句话说,我想计算所有变量(q,chi,delta)的偏导数).

如何使用NumPy计算此渐变?

Ste*_*fan 21

问题是,numpy不能直接给你衍生物,你有两个选择:

随着NUMPY

您基本上要做的是在三维中定义网格并评估此网格上的功能.然后,您将此函数值表提供numpy.gradient给每个维度(变量)的数值导数的数组.

这里的例子:

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)
Run Code Online (Sandbox Code Playgroud)

没有NUMPY

您也可以使用居中的差商来自己计算导. 中心差异商

这基本上numpy.gradient 就是为预定义网格的每个点了什么.

  • 确切地说,公式是'numpy.diff'所做的; `numpy.gradient`类似,但在边界处有特殊行为. (2认同)

Raf*_*ter 13

Numpy和Scipy用于数值计算.由于您想要计算分析函数的梯度,您必须使用支持符号数学的Sympy包.这里解释区分(您实际上可以在左下角的Web控制台中使用它).

您可以在Ubuntu下安装Sympy

sudo apt-get install python-sympy
Run Code Online (Sandbox Code Playgroud)

或任何带有pip的 Linux发行版

sudo pip install sympy
Run Code Online (Sandbox Code Playgroud)