scls - 1 year ago 262
Python Question

# Mesh grid functions in Python (meshgrid mgrid ogrid ndgrid)

I'm looking for a clear comparison of meshgrid-like functions. Unfortunately I don't find it!

Numpy http://docs.scipy.org/doc/numpy/reference/ provides

• `mgrid`

• `ogrid`

• `meshgrid`

• `ndgrid`

• `boxgrid`

Ideally a table summarizing all this would be perfect!

`numpy.meshgrid` is modelled after Matlab's `meshgrid` command. It is used to vectorise functions of two variables, so that you can write

``````x = numpy.array([1, 2, 3])
y = numpy.array([10, 20, 30])
XX, YY = numpy.meshgrid(x, y)
ZZ = XX + YY

ZZ => array([[11, 12, 13],
[21, 22, 23],
[31, 32, 33]])
``````

So `ZZ` contains all the combinations of `x` and `y` put into the function. When you think about it, `meshgrid` is a bit superfluous for numpy arrays, as they broadcast. This means you can do

``````XX, YY = numpy.atleast_2d(x, y)
YY = YY.T # transpose to allow broadcasting
ZZ = XX + YY
``````

and get the same result.

`mgrid` and `ogrid` are helper classes which use index notation so that you can create `XX` and `YY` in the previous examples directly, without having to use something like `linspace`. The order in which the output are generated is reversed.

``````YY, XX = numpy.mgrid[10:40:10, 1:4]
ZZ = XX + YY # These are equivalent to the output of meshgrid

YY, XX = numpy.ogrid[10:40:10, 1:4]
ZZ = XX + YY # These are equivalent to the atleast_2d example
``````

I am not familiar with the scitools stuff, but `ndgrid` seems equivalent to `meshgrid`, while `BoxGrid` is actually a whole class to help with this kind of generation.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download