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_mat: obj.write_mat(fn, fields, [::10])is a 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 内に存在することを意味します。

4

1 に答える 1

3

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)
于 2013-03-01T16:48:29.727 に答える