This example demonstrates the various ways that MetPy’s gradient function can be utilized.

import numpy as np

import metpy.calc as mpcalc
from metpy.units import units


Create some test data to use for our example

data = np.array([[23, 24, 23],
[25, 26, 25],
[27, 28, 27],
[24, 25, 24]]) * units.degC

# Create an array of x position data (the coordinates of our temperature data)
x = np.array([[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
[1, 2, 3]]) * units.kilometer

y = np.array([[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
[4, 4, 4]]) * units.kilometer


Calculate the gradient using the coordinates of the data

grad = mpcalc.gradient(data, coordinates=(y, x))


Out:

Gradient in y direction:  [[ 2.   2.   2. ] [ 2.   2.   2. ] [-0.5 -0.5 -0.5] [-5.5 -5.5 -5.5]] kelvin / kilometer
Gradient in x direction:  [[ 2.  0. -2.] [ 2.  0. -2.] [ 2.  0. -2.] [ 2.  0. -2.]] kelvin / kilometer


It’s also possible that we do not have the position of data points, but know that they are evenly spaced. We can then specify a scalar delta value for each axes.

x_delta = 2 * units.km
y_delta = 1 * units.km


Out:

Gradient in y direction:  [[ 2.   2.   2. ] [ 2.   2.   2. ] [-0.5 -0.5 -0.5] [-5.5 -5.5 -5.5]] kelvin / kilometer
Gradient in x direction:  [[ 1.  0. -1.] [ 1.  0. -1.] [ 1.  0. -1.] [ 1.  0. -1.]] kelvin / kilometer


Finally, the deltas can be arrays for unevenly spaced data.

x_deltas = np.array([[2, 3],
[1, 3],
[2, 3],
[1, 2]]) * units.kilometer
y_deltas = np.array([[2, 3, 1],
[1, 3, 2],
[2, 3, 1]]) * units.kilometer

Gradient in y direction:  [[ 0.33333333  0.66666667  2.33333333] [ 1.66666667  0.66666667  1.66666667] [ 0.83333333 -0.16666667 -1.66666667] [-3.83333333 -1.83333333 -4.33333333]] kelvin / kilometer