2013-03-01 56 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

回答