1

h5pyのHDFデータセットは、numpy配列の機能のサブセットを実装しますが、実際にアクセスするデータのみがメモリに読み込まれるという利点があります。したがって、可能な限りデータセットを操作し、不足している機能が必要な場合にのみデータセットを配列に変換したいと考えています。そのために、最初にデータセットを含み、すべてをそれに転送するラッパークラスを定義しようとしましたが、これが発生すると、名前エラーをキャッチし、そのデータセットを配列に変換します。私の現在の実装は次のとおりです。

class DArr:
    def __init__(self, dset):
        self.arr = dset
    def __getitem__(self, args):
        try:
            return self.arr.__getitem__(args)
        except:
            self.arr = np.array(self.arr)
            return self.arr.__getitem__(args)
    def __getattr__(self, name):
        try:
            return self.arr.__getattr__(name)
        except:
            self.arr = np.array(self.arr)
            return self.arr.__getattr__(name)

ただし、にself.arrなっている場合は失敗します。これは、転送できるIがnumpy.arrayないように見える__getattr__ためです。この種の転送を行う正しい方法は何ですか?目標は、ユーザーの観点からは、DArrがと同じように動作することです。numpy.array

4

1 に答える 1

2

getattr組み込み関数を使用します。

def __getattr__(self, name):
    try:
        return getattr(self.arr, name)
    except:
        self.arr = np.array(self.arr)
        return getattr(self.arr, name)

索引付け演算子__getitem__を使用する場合:[]

def __getitem__(self, args):
    try:
        return self.arr[args]
    except:
        self.arr = np.array(self.arr)
        return self.arr[args]
于 2012-11-22T18:40:20.650 に答える