Return the gradient of an N-dimensional array.

The gradient is computed using second order accurate central differences in the interior and either first differences or second order accurate one-sides (forward or backwards) differences at the boundaries. The returned gradient hence has the same shape as the input array.

Parameters: f : array_like An N-dimensional array containing samples of a scalar function. varargs : scalar or list of scalar, optional N scalars specifying the sample distances for each dimension, i.e. dx, dy, dz, ... Default distance: 1. single scalar specifies sample distance for all dimensions. if axis is given, the number of varargs must equal the number of axes. edge_order : {1, 2}, optional Gradient is calculated using N-th order accurate differences at the boundaries. Default: 1. New in version 1.9.1. axis : None or int or tuple of ints, optional Gradient is calculated only along the given axis or axes The default (axis = None) is to calculate the gradient for all the axes of the input array. axis may be negative, in which case it counts from the last to the first axis. New in version 1.11.0. gradient : ndarray or list of ndarray A set of ndarrays (or a single ndarray if there is only one dimension) correposnding to the derivatives of f with respect to each dimension. Each derivative has the same shape as f.

Examples

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

For two dimensional arrays, the return will be two arrays ordered by axis. In this example the first array stands for the gradient in rows and the second one in columns direction:

```>>> 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])
>>> y = x**2
array([-0.,  2.,  4.,  6.,  8.])
```

The axis keyword can be used to specify a subset of axes of which the gradient is calculated >>> np.gradient(np.array([[1, 2, 6], [3, 4, 5]], dtype=np.float), axis=0) array([[ 2., 2., -1.],

[ 2., 2., -1.]])

numpy.ediff1d

numpy.cross