This post will show what a meshgrid is and how it can be created and used in python.

A meshgrid is a rectangular grid of values made out of coordinate vectors. It is also that the values in the meshgrid are a function of the coordinate vectors.


Let’s say you want to create a meshgrid out of the coordinate vectors x and y. The naive way to do it is create a new rectangular grid and assign the values of the grid by evaluating the function at each point of the meshgrid. The following code illustrated the naive way:

Meshgrid Naive Way:

x = [0, 1, 2, 3, 4, 5]


y = [0, 1, 2, 3, 4, 5]


z = [[0 for j in range(len(y))] for i in range(x)]

for i in range(len(x)):


    for j in range(len(y)):


        z[i, j] = func(x[i], y[i])

<img alt="" data-lazy- data-lazy-src="https://kirelos.com/wp-content/uploads/2021/08/echo/1-31.jpg" data-lazy- height="304" src="data:image/svg xml,” width=”1726″>

The drawbacks of this approach are that it is tedious, and handling large coordinate vectors takes more time. The python library numpy for scientific computing helps in creating a meshgrid more efficiently. For creating a meshgrid, we will be using the function numpy.meshgrid. Here is the same solution using numpy.

$ python3


Python 3.8.5 (default, Mar  8 2021, 13:02:45)

[GCC 9.3.0] on linux2


Type “help”, “copyright”, “credits” or “license” for more information.

>>> import numpy as np

>>> x = np.linspace(0, 6, 3)

>>> x

array([0., 3., 6.])

>>> y = np.linspace(1, 7, 3)

>>> y

array([1., 4., 7.])

>>> xx, yy = np.meshgrid(x, y)

>>> xx

array([[0., 3., 6.],


    [0., 3., 6.],


    [0., 3., 6.]])

>>> xx.shape

(3, 3)

<img alt="" data-lazy- data-lazy-src="https://kirelos.com/wp-content/uploads/2021/08/echo/2-31.jpg" data-lazy- height="706" src="data:image/svg xml,” width=”1726″>

Numpy’s vectorized operations make it faster than python loops. Vectorizations help by delegating the looping operation to highly optimized C code internally and making it faster. It also expresses operations on the entire arrays rather than the individual elements of the arrays.

Evaluating a function over the meshgrid is very easy. All we need to do is just call the function. We will also plot the evaluated function here by making a contour plot using matplotlib. Continuing from the previous example,

<img alt="" data-lazy- data-lazy-src="https://kirelos.com/wp-content/uploads/2021/08/echo/3-30.jpg" data-lazy- height="304" src="data:image/svg xml,” width=”1726″>

>>> z = np.sin(xx**2 yy**2)

>>> import matplotlib.pyplot as plt

>>> plt.figure(figsize=(10, 6))

>>> plt.contourf(xx, yy, z)

>>> plt.colorbar()

>>> plt.show()

<img alt="" data-lazy- data-lazy-src="https://kirelos.com/wp-content/uploads/2021/08/echo/4-28.jpg" data-lazy- height="1200" src="data:image/svg xml,” width=”2000″>

If the array x and y are too big, then the array xx and yy might take a lot of space. This can be optimized using the option sparse=True.

>>> x = np.linspace(0, 5, 6)

>>> y = np.linspace(0, 5, 6)

>>> xx, yy = np.meshgrid(x, y, sparse=False) #default

>>> xx

array([[0., 1., 2., 3., 4., 5.],


    [0., 1., 2., 3., 4., 5.],


    [0., 1., 2., 3., 4., 5.],


    [0., 1., 2., 3., 4., 5.],


    [0., 1., 2., 3., 4., 5.],


    [0., 1., 2., 3., 4., 5.]])

>>> xx.shape

(6, 6)

>>> xx, yy = np.meshgrid(x, y, sparse=True) #default

>>> xx

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

>>> xx.shape

(1, 6)

<img alt="" data-lazy- data-lazy-src="https://kirelos.com/wp-content/uploads/2021/08/echo/5-26.jpg" data-lazy- height="850" src="data:image/svg xml,” width=”1726″>