Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

numpy.meshgrid explanation

Tags:

python

numpy

Could someone care to explain the meshgrid method? I cannot wrap my mind around it. The example is from the [SciPy][1] site:

import numpy as np

nx, ny = (3, 2)
x = np.linspace(0, 1, nx)
print ("x =", x)

y = np.linspace(0, 1, ny)
print ("y =", y)

xv, yv = np.meshgrid(x, y)
print ("xv_1 =", xv)
print ("yv_1 =", yv)


xv, yv = np.meshgrid(x, y, sparse=True)  # make sparse output arrays
print ("xv_2 =", xv)

print ("yv_2 =", yv)

Printout is :

x = [ 0.   0.5  1. ]
y = [ 0.  1.]
xv_1 = [[ 0.   0.5  1. ]
 [ 0.   0.5  1. ]]
yv_1 = [[ 0.  0.  0.]
 [ 1.  1.  1.]]
xv_2 = [[ 0.   0.5  1. ]]
yv_2 = [[ 0.]
 [ 1.]]

Why are arrays xv_1 and yv_1 formed like this ? Ty :) [1]: http://docs.scipy.org/doc/numpy/reference/generated/numpy.meshgrid.html#numpy.meshgrid

like image 817
borgmater Avatar asked Sep 23 '16 14:09

borgmater


People also ask

What does the NumPy meshgrid () function return?

The numpy.meshgrid function returns two 2-Dimensional arrays representing the X and Y coordinates of all the points.

How to create a rectangular grid using Python NumPy?

The numpy module of Python provides meshgrid () function for creating a rectangular grid with the help of the given 1-D arrays that represent the Matrix indexing or Cartesian indexing. MATLAB somewhat inspires the meshgrid () function. From the coordinate vectors, the meshgrid () function returns the coordinate matrices.

What is a meshgrid in Python?

In python, meshgrid is a function that creates a rectangular grid out of 2 given 1-dimensional arrays that denotes the Matrix or Cartesian indexing. It is inspired from MATLAB.

How to plot meshgrid plot in Matplotlib using NumPy?

This can be done very easily by using meshgrid function of Numpy as follows: import numpy as np x, y = np.meshgrid ( [0.1, 0.2, 0.3, 0.4], [4, 5, 6]) import matplotlib.pyplot as plt plt.scatter (x, y) To learn more about it, please visit Numpy Meshgrid Reference


1 Answers

In [214]: nx, ny = (3, 2)
In [215]: x = np.linspace(0, 1, nx)
In [216]: x
Out[216]: array([ 0. ,  0.5,  1. ])
In [217]: y = np.linspace(0, 1, ny)
In [218]: y
Out[218]: array([ 0.,  1.])

Using unpacking to better see the 2 arrays produced by meshgrid:

In [225]: X,Y = np.meshgrid(x, y)
In [226]: X
Out[226]: 
array([[ 0. ,  0.5,  1. ],
       [ 0. ,  0.5,  1. ]])
In [227]: Y
Out[227]: 
array([[ 0.,  0.,  0.],
       [ 1.,  1.,  1.]])

and for the sparse version. Notice that X1 looks like one row of X (but 2d). and Y1 like one column of Y.

In [228]: X1,Y1 = np.meshgrid(x, y, sparse=True)
In [229]: X1
Out[229]: array([[ 0. ,  0.5,  1. ]])
In [230]: Y1
Out[230]: 
array([[ 0.],
       [ 1.]])

When used in calculations like plus and times, both forms behave the same. That's because of numpy's broadcasting.

In [231]: X+Y
Out[231]: 
array([[ 0. ,  0.5,  1. ],
       [ 1. ,  1.5,  2. ]])
In [232]: X1+Y1
Out[232]: 
array([[ 0. ,  0.5,  1. ],
       [ 1. ,  1.5,  2. ]])

The shapes might also help:

In [235]: X.shape, Y.shape
Out[235]: ((2, 3), (2, 3))
In [236]: X1.shape, Y1.shape
Out[236]: ((1, 3), (2, 1))

The X and Y have more values than are actually needed for most uses. But usually there isn't much of penalty for using them instead the sparse versions.

like image 50
hpaulj Avatar answered Dec 07 '22 23:12

hpaulj