从技术上讲,什么是numpy.mgrid?

时间:2019-01-19 19:55:30

标签: python numpy

我已经使用mgrid已有一段时间了,对此我很熟悉。但是从那以后,我一直在想它到底是什么...

xx, yy = mgrid[0:5, 0:3] 的典型用例和语法为

mgrid[...]

困扰我的是语法mgrid,这使我相信mgrid不是函数或方法。 docsmgrid((0,5), (0,3))

  

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

它在后台做什么?以及为什么将它像函数一样使用,但是语法与函数不同(我希望像mgrid这样的东西)。我真的迷失在试图了解router.post('/deleteDP',jwtValid,function (req,res) { user.findById({'_id':req.decoded.id},function (err,result) { if(err){res.send("1");} if(!result){res.send("2");} if(result){ var key = result.dp.substr(49,result.dp.length); s3.deleteObject({ Bucket:'probablee-dp', Key:key}, function(err, data) { if (err) { console.log(err, err.stack); return res.send("3"); } // error else if(!data){return res.send("4");} // no object found else if(data){ data.dp = ""; result.save(function (err,done) { if(err){return res.send("5"+err);} else if(done){ return res.send("6"); } }); } }); } }); }); 是什么。

欢迎提供任何见解!

1 个答案:

答案 0 :(得分:5)

numpy.mgridnumpy/index_tricks.pyMGridClass对象。如您所知,该对象使您可以构造多维网格。

MGridClass扩展了nd_grid class,它实现了__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__方法的类的实例。因此,它被切成薄片而不被调用。