【问题标题】:Slice syntax to object [duplicate]切片语法到对象[重复]
【发布时间】:2013-03-01 16:03:41
【问题描述】:

我有一个保存数据的类(一个 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 可能是一个字符串列表(因为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 中。

【问题讨论】:

标签: python numpy slice


【解决方案1】:

Passing Python slice syntax around to functions 上的答案是正确的,但由于您已经在使用 NumPy,您可以使用 np.s_

import numpy as np
np.s_[1:2:3]
Out[1]: slice(1, 2, 3)

【讨论】:

    猜你喜欢
    • 2014-06-13
    • 2011-10-01
    • 2016-04-20
    • 2012-12-05
    • 2016-03-15
    • 1970-01-01
    • 2016-07-24
    • 2013-11-09
    • 1970-01-01
    相关资源
    最近更新 更多