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