我有一个保存数据的类(一个 numpy ndarray),其中包括一个将数据存储到 mat 文件的方法(使用 scipy.io.savemat)。数据可能非常大,所以我可能只想存储一段数据。因此我传递了一个切片对象,如下所示:
def write_mat(self, fn, fields=None, sel=None):
# (set fields and sel to sensible values if None)
scipy.io.savemat(fn, dict(data=self.data[fields][sel]))
这里,fields
可能是字符串列表(forself.data
是结构化数组),并且sel
是切片对象。当然,我不能直接将切片语法传递给write_mat
:obj.write_mat(fn, fields, [::10])
是一个 SyntaxError。当然,我可以slice(None, None, 10)
改为传入,但我不是很喜欢这种解决方案。
是否有任何内置的便利对象可以让我从切片语法创建切片对象?当然,它很容易实现:
In [574]: class Foo:
...: def __getitem__(self, item):
...: return item
...:
In [578]: slicer = Foo()
In [579]: slicer[::100]
Out[579]: slice(None, None, 100)
但即使是易于实施的东西,也可能已经有了更标准的解决方案。有没有?按照标准,我的意思是存在于 Python、numpy 或 scipy 中。