# How do I interpret numpy.gradient?

The first example of the documentation is http://docs.scipy.org/doc/numpy/reference/generated/numpy.gradient.html

```
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. ])
```

The output should not be:

```
array([ 1. , 1., 2., 3., 4., 5. ])
```

???

source to share

What you expect as output is what you get on startup `np.diff`

, but then one item is shorter:

```
np.diff(arr)
>>> array([ 1., 2., 3., 4., 5.])
```

`np.gradient`

looks at the i'th element and looks at the mean between the differences for the `(i+1)`

'th vs. `i`

'th and `(i-1)`

' th vs. `i`

'th element. For edge values, it can only use one point. So the number two comes `1.5`

from averaging `(2-1)`

and `(4-2)`

.

source to share

The Numpy gradient uses, where appropriate `forward`

, `backward`

and `central`

differences.

Input data:

```
x = np.array([1, 2, 4, 7, 11, 16], dtype=np.float)
np.gradient(x) # this uses default distance=1
```

Output:

array ([1., 1.5, 2.5, 3.5, 4.5, 5.])

For the first element, it uses the forward difference:

(2 - 1) / 1 = 1.

For the last element, it uses the reverse difference:

(16 - 11) / 1 = 5.

And, for the elements in between, the central difference applies:

(4 - 1) / 2 = 1.5

(7 - 2) / 2 = 2.5

(11-4) / 2 = 3.5

(16-7) / 2 = 4.5

Differences are divided by the fetch distance for forward jumps and backward (default = 1), but twice the distance for the center difference to get the corresponding gradients.

source to share