首页 > 解决方案 > 从技术上讲,什么是 numpy.mgrid?

问题描述

我已经使用numpy.mgrid了一段时间,我熟悉它的作用。但从那以后,我一直想知道它到底是什么……

一个典型的用例和语法mgrid

xx, yy = mgrid[0:5, 0:3]

困扰我的是语法mgrid[...],这让我相信它mgrid不是函数或方法。文档说这是mgrid一个

nd_grid 实例,它返回一个密集的多维“网格”。

它在后台做什么?以及为什么它像函数一样使用,但语法与函数不同(我希望类似mgrid((0,5), (0,3)))。我真的迷失在试图理解什么mgrid是。

欢迎任何见解!

标签: pythonnumpy

解决方案


numpy.mgrid是in的一个对象。如您所知,此对象允许您构建多维网格网格。MGridClassnumpy/index_tricks.py

MGridClass扩展nd_grid,它实现了一个__getitem__方法。方括号实际上代表了对 的调用nd_grid.__getitem__,它实现了基于传递的切片构造网格网格的核心逻辑。

nd_grid可以在此处找到有关 MCVE 工作的简要说明。

class dummy_1d_grid:
    def __getitem__(self, val):
        print(val)
        return np.arange(val.start, val.stop, val.step, )

mgrid_1d = dummy_1d_grid()
mgrid_1d[:5]

slice(0, 5, None)
# array([0, 1, 2, 3, 4])

np.mgrid[0:5]
# array([0, 1, 2, 3, 4])

当然,这都是一个实现细节,所以布局和类都可能发生变化。重点是它是实现该__getitem__方法的类的实例。因此它被切片,而不是被调用。


推荐阅读