Aso Agile
Aso Agile

Reputation: 417

How to create multidimensional array with numpy.mgrid

I wonder how to create a grid (multidimensional array) with numpy mgrid for an unknown number of dimensions (D), each dimension with a lower and upper bound and number of bins:

n_bins =  numpy.array([100 for  d in numpy.arrange(D)])
bounds = numpy.array([(0.,1) for d in numpy.arrange(D)])
grid = numpy.mgrid[numpy.linspace[(numpy.linspace(bounds(d)[0], bounds(d)[1], n_bins[d] for d in numpy.arrange(D)]

I guess above doesn't work, since mgrid creates array of indices not values. But how to use it to create array of values.

Thanks

Aso.agile

Upvotes: 6

Views: 5069

Answers (1)

unutbu
unutbu

Reputation: 879103

You might use

np.mgrid[[slice(row[0], row[1], n*1j) for row, n in zip(bounds, n_bins)]]

import numpy as np
D = 3
n_bins =  100*np.ones(D)
bounds = np.repeat([(0,1)], D, axis = 0)

result = np.mgrid[[slice(row[0], row[1], n*1j) for row, n in zip(bounds, n_bins)]]
ans = np.mgrid[0:1:100j,0:1:100j,0:1:100j]

assert np.allclose(result, ans)

Note that np.ogrid can be used in many places where np.mgrid is used, and it requires less memory because the arrays are smaller.

Upvotes: 6

Related Questions