scls - 6 months ago 61

Python Question

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`

Scitools http://scitools.googlecode.com/hg/doc/api/html/index.html provides

`ndgrid`

`boxgrid`

Ideally a table summarizing all this would be perfect!

Answer

`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.