Hi Warren, ogrid doesn’t solve my problem. Note that my code returns arrays that would evaluate as equal to the mgrid output. It’s just that they are copied in mgrid into a giant array, instead of broadcast:
In [176]: a0, b0 = np.mgrid[:5, :5] In [177]: a1, b1 = th.broadcast_mgrid((np.arange(5), np.arange(5))) In [178]: a0 Out[178]: array([[0, 0, 0, 0, 0], [1, 1, 1, 1, 1], [2, 2, 2, 2, 2], [3, 3, 3, 3, 3], [4, 4, 4, 4, 4]]) In [179]: a1 Out[179]: array([[0, 0, 0, 0, 0], [1, 1, 1, 1, 1], [2, 2, 2, 2, 2], [3, 3, 3, 3, 3], [4, 4, 4, 4, 4]]) In [180]: a0.strides Out[180]: (40, 8) In [181]: a1.strides Out[181]: (8, 0) On 9 Mar 2017, 2:05 PM +1100, Warren Weckesser <warren.weckes...@gmail.com>, wrote: > > > > On Wed, Mar 8, 2017 at 9:48 PM, Juan Nunez-Iglesias <jni.s...@gmail.com> > > wrote: > > > I was a bit surprised to discover that both meshgrid nor mgrid return > > > fully instantiated arrays, when simple broadcasting (ie with stride=0 for > > > other axes) is functionally identical and happens much, much faster. > > > > > > > > > Take a look at ogrid: > > https://docs.scipy.org/doc/numpy/reference/generated/numpy.ogrid.html > > > > Warren > > > > > > > I wrote my own function to do this: > > > > > > > > > def broadcast_mgrid(arrays): > > > shape = tuple(map(len, arrays)) > > > ndim = len(shape) > > > result = [] > > > for i, arr in enumerate(arrays, start=1): > > > reshaped = np.broadcast_to(arr[[...] + [np.newaxis] * (ndim - i)], > > > shape) > > > result.append(reshaped) > > > return result > > > > > > > > > For even a modest-sized 512 x 512 grid, this version is close to 100x > > > faster: > > > > > > > > > In [154]: %timeit th.broadcast_mgrid((np.arange(512), np.arange(512))) > > > 10000 loops, best of 3: 25.9 µs per loop > > > > > > In [156]: %timeit np.meshgrid(np.arange(512), np.arange(512)) > > > 100 loops, best of 3: 2.02 ms per loop > > > > > > In [157]: %timeit np.mgrid[:512, :512] > > > 100 loops, best of 3: 4.84 ms per loop > > > > > > > > > Is there a conscious design decision as to why this isn’t what > > > meshgrid/mgrid do already? Or would a PR be welcome to do this? > > > > > > Thanks, > > > > > > Juan. > > > > > > _______________________________________________ > > > NumPy-Discussion mailing list > > > NumPy-Discussion@scipy.org > > > https://mail.scipy.org/mailman/listinfo/numpy-discussion > > > > > _______________________________________________ > NumPy-Discussion mailing list > NumPy-Discussion@scipy.org > https://mail.scipy.org/mailman/listinfo/numpy-discussion
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org https://mail.scipy.org/mailman/listinfo/numpy-discussion