NumPy参考 >例行程序 >Mathematical functions > numpy.gradient
numpy.
gradient
(f,* varargs,** kwargs )[源代码] ¶返回N维数组的梯度。
使用内部点中的二阶精确中心差和边界处的一阶或二阶精确侧(向前或向后)差来计算梯度。因此,返回的渐变与输入数组具有相同的形状。
包含标量函数样本的N维数组。
f值之间的间距。所有尺寸的默认单位间距。可以使用以下命令指定间距:
单标量,以指定所有尺寸的样本距离。
N个标量,用于为每个维度指定恒定的采样距离。即dx,dy,dz,...
N个数组,用于指定沿F的每个维度的值的坐标。数组的长度必须与相应维度的大小匹配
N个标量/数组的任意组合,含义分别为2和3。
如果指定轴,则可变参数的数量必须等于轴的数量。默认值:1。
梯度是使用边界处的N阶精确差来计算的。默认值:1。
1.9.1版中的新功能。
仅沿给定的一个或多个轴计算梯度。默认值(轴=无)是为输入数组的所有轴计算梯度。轴可能为负,在这种情况下,它从最后一个轴开始计数。
1.11.0版中的新功能。
一组ndarray(如果只有一个维度,则为单个ndarray),它对应于f在每个维度上的导数。每个导数具有与f相同的形状。
笔记
假设(即,
至少具有3个连续导数)并且
设为非均匀的逐步大小,我们将
真实梯度与其从相邻网格点的线性组合得出的估计值之间的“一致性误差”最小化:
通过代
入其泰勒级数展开并
转化为求解以下线性系统:
得出的近似值如下:
值得注意的是,如果
(即,数据均匀分布)我们找到标准的二阶近似值:
通过类似的过程,可以导出用于边界的前向/后向近似。
参考文献
Quarteroni A.,Sacco R.,Saleri F.(2007年)数值数学(应用数学课本)。纽约:施普林格。
Durran DR(1999)地球物理流体动力学中波动方程的数值方法。纽约:施普林格。
Fornberg B.(1988)在任意间隔的网格上生成有限差分公式,计算数学51,第1期。184:699-706。 PDF。
例子
>>> f = np.array([1, 2, 4, 7, 11, 16], dtype=float)
>>> np.gradient(f)
array([1. , 1.5, 2.5, 3.5, 4.5, 5. ])
>>> np.gradient(f, 2)
array([0.5 , 0.75, 1.25, 1.75, 2.25, 2.5 ])
也可以使用一个数组指定间距,该数组代表值F沿尺寸的坐标。例如均匀的间距:
>>> x = np.arange(f.size)
>>> np.gradient(f, x)
array([1. , 1.5, 2.5, 3.5, 4.5, 5. ])
或非统一的:
>>> x = np.array([0., 1., 1.5, 3.5, 4., 6.], dtype=float)
>>> np.gradient(f, x)
array([1. , 3. , 3.5, 6.7, 6.9, 2.5])
对于二维数组,返回将是按轴排序的两个数组。在此示例中,第一个数组代表行中的渐变,第二个数组代表列方向:
>>> np.gradient(np.array([[1, 2, 6], [3, 4, 5]], dtype=float))
[array([[ 2., 2., -1.],
[ 2., 2., -1.]]), array([[1. , 2.5, 4. ],
[1. , 1. , 1. ]])]
在此示例中,还指定了间距:轴= 0均匀,轴= 1不均匀
>>> dx = 2.
>>> y = [1., 1.5, 3.5]
>>> np.gradient(np.array([[1, 2, 6], [3, 4, 5]], dtype=float), dx, y)
[array([[ 1. , 1. , -0.5],
[ 1. , 1. , -0.5]]), array([[2. , 2. , 2. ],
[2. , 1.7, 0.5]])]
可以指定使用edge_order处理边界的方式
>>> x = np.array([0, 1, 2, 3, 4])
>>> f = x**2
>>> np.gradient(f, edge_order=1)
array([1., 2., 4., 6., 7.])
>>> np.gradient(f, edge_order=2)
array([0., 2., 4., 6., 8.])
所述轴关键字可以被用来指定一个被计算的梯度轴的一个子集
>>> np.gradient(np.array([[1, 2, 6], [3, 4, 5]], dtype=float), axis=0)
array([[ 2., 2., -1.],
[ 2., 2., -1.]])