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
NumPy: mgrid() function The mgrid() function is used to get a dense multi-dimensional 'meshgrid'. An instance of numpy. lib. index_tricks. nd_grid which returns an dense (or fleshed out) mesh-grid when indexed, so that each returned argument has the same shape.
Numpy has a function to compute the combination of 2 or more Numpy arrays named as “numpy. meshgrid()“. This function is used to create a rectangular grid out of two given one-dimensional arrays representing the Cartesian indexing or Matrix indexing.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With