上一主题

numpy.ediff1d

下一主题

numpy.cross

numpy.gradient

numpy.gradient(f, *varargs, **kwargs)[source]

返回N维数组的梯度。

计算梯度:内部使用二阶精确中心差,边界处使用一阶差或二阶精确单边(向前或向后)差。因此,返回的梯度具有与输入数组相同的形状。

参数:

f:array_like

包含标量函数样本的N维数组。

varargs:标量或标量列表,可选

N个标量,其指定每个维度的样本距离,即dxdydz等。默认距离:1。只有一个标量表示所有维度的样本距离。如果给定axis,则varargs的数量必须等于轴的数量。

edge_order:{1,2},可选

边界处使用的Nth阶精度差来计算梯度。默认值:1。

版本1.9.1中的新功能。

axis:None、整数或整数元组,可选

仅沿给定轴计算梯度。默认值(axis = None)用于计算输入数组的所有轴的梯度。轴可以为负,在这种情况下,从最后一个轴计数到第一个轴。

版本1.11.0中的新功能。

返回:

gradient : ndarray列表

列表的每个元素具有与f相同的形状,给出相对于每个维度的f的导数。

例子

>>> x = np.array([1, 2, 4, 7, 11, 16], dtype=np.float)
>>> np.gradient(x)
array([ 1. ,  1.5,  2.5,  3.5,  4.5,  5. ])
>>> np.gradient(x, 2)
array([ 0.5 ,  0.75,  1.25,  1.75,  2.25,  2.5 ])

对于二维数组,返回将是按轴排序的两个数组。在这个例子中,第一个数组代表行中的梯度,第二个数组代表列方向上的梯度:

>>> np.gradient(np.array([[1, 2, 6], [3, 4, 5]], dtype=np.float))
[array([[ 2.,  2., -1.],
        [ 2.,  2., -1.]]), array([[ 1. ,  2.5,  4. ],
        [ 1. ,  1. ,  1. ]])]
>>> x = np.array([0, 1, 2, 3, 4])
>>> dx = np.gradient(x)
>>> y = x**2
>>> np.gradient(y, dx, edge_order=2)
array([-0.,  2.,  4.,  6.,  8.])

axis关键字可用于指定轴的一个子集来计算梯度

>>> np.gradient(np.array([[1, 2, 6], [3, 4, 5]], dtype=np.float), axis=0)
array([[ 2., 2., -1.], [ 2., 2., -1.]]