So I know what the gradient of a (mathematical) function is, so I feel like I should know what numpy.gradient
does. But I don't. The documentation is not really helpful either:
Return the gradient of an N-dimensional array.
What is the gradient of an array? When is numpy.gradient
useful?
Also in the documentation1:
>>> y = np.array([1, 2, 4, 7, 11, 16], dtype=np.float) >>> j = np.gradient(y) >>> j array([ 1. , 1.5, 2.5, 3.5, 4.5, 5. ])
y
)/(change in x
).x
, here, is the index, so the difference between adjacent values is 1.
At the boundaries, the first difference is calculated. This means that at each end of the array, the gradient given is simply, the difference between the end two values (divided by 1)
So, the gradient of y
, above, is calculated thus:
j[0] = (y[1]-y[0])/1 = (2-1)/1 = 1 j[1] = (y[2]-y[0])/2 = (4-1)/2 = 1.5 j[2] = (y[3]-y[1])/2 = (7-2)/2 = 2.5 j[3] = (y[4]-y[2])/2 = (11-4)/2 = 3.5 j[4] = (y[5]-y[3])/2 = (16-7)/2 = 4.5 j[5] = (y[5]-y[4])/1 = (16-11)/1 = 5
You could find the minima of all the absolute values in the resulting array to find the turning points of a curve, for example.
1The array is actually called x
in the example in the docs, I've changed it to y
to avoid confusion.
The gradient is computed using central differences in the interior and first differences at the boundaries.
and
The default distance is 1
This means that in the interior it is computed as
where h = 1.0
and at the boundaries
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With