我已经使用mgrid
已有一段时间了,对此我很熟悉。但是从那以后,我一直在想它到底是什么...
xx, yy = mgrid[0:5, 0:3]
的典型用例和语法为
mgrid[...]
困扰我的是语法mgrid
,这使我相信mgrid
不是函数或方法。 docs说mgrid((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");
}
});
}
});
}
});
});
是什么。
欢迎提供任何见解!
答案 0 :(得分:5)
numpy.mgrid
是numpy/index_tricks.py
中MGridClass
的对象。如您所知,该对象使您可以构造多维网格。
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__
方法的类的实例。因此,它被切成薄片而不被调用。