Reputation: 417
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
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