Hilemonstoer - 2 years ago 217
Python Question

# Is there a multi-dimensional version of arange/linspace in numpy?

I would like a list of 2d numpy arrays (x,y) , where each x is in {-5, -4.5, -4, -3.5, ..., 3.5, 4, 4.5, 5} and the same for y.

I could do

``````x = np.arange(-5, 5.1, 0.5)
y = np.arange(-5, 5.1, 0.5)
``````

and then iterate through all possible pairs, but I'm sure there's a nicer way...

I would like something back that looks like:

``````[[-5, -5],
[-5, -4.5],
[-5, -4],
...
[5, 5]]
``````

but the order does not matter.

You can use `np.mgrid` for this, it's often more convenient than `np.meshgrid` because it creates the arrays in one step:

``````import numpy as np
X,Y = np.mgrid[-5:5.1:0.5, -5:5.1:0.5]
``````

For linspace-like functionality, replace the step (i.e. `0.5`) with a complex number whose magnitude specifies the number of points you want in the series. Using this syntax, the same arrays as above are specified as:

``````X, Y = np.mgrid[-5:5:21j, -5:5:21j]
``````

You can then create your pairs as:

``````xy = np.vstack((X.flatten(), Y.flatten())).T
``````

As @ali_m suggested, this can all be done in one line:

``````xy = np.mgrid[-5:5.1:0.5, -5:5.1:0.5].reshape(2,-1).T
``````

Best of luck!

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