2013-03-01 59 views
1

我有一个类包含数据(numpy ndarray),其中包括一个方法将数据存储到垫文件(使用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可以是字符串的列表(对于self.data是结构化阵列),以及sel是切片对象。当然,我不能直接将片语法传递到write_matobj.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中。

+0

因为重复的问题,接受的答案并没有提到它:你想'np.s_ ',http://docs.scipy.org/doc/numpy/reference/generated/numpy.s_.html – ecatmur 2013-03-01 16:42:23

+0

@ecatmur我认为你仍然可以回答,即使它作为重复关闭? – gerrit 2013-03-01 16:43:15

回答