データを現在の長さ以外の行に追加するときに自動的にサイズ変更されるnumpy.recarrayのサブクラスを作成したいとします。NumPy再配列の自動サイズ変更
私が欲しいものは以下のコードです。
class autorecarray(numpy.recarray):
def __init__(self,*args,**kwargs):
self._increment = 1
numpy.recarray.__init__(self,args,kwargs)
def __setitem__(self,ind,y):
try:
numpy.recarray.__setitem__(self,ind,y)
except IndexError:
self.resize((self.__len__()+self._increment,),refcheck=False)
self.__setitem__(ind,y)
それは、このユースケースのために正常に動作します:
a[2]['f1'] = 3
マイ初期:
a = utils.autorecarray((1,),formats=['i4','i4'])
a[1] = (1,2) # len(a) will now be 2
しかし、この使用法はnumpy.core.records.recarray __getitem__
方法についてはIndexErrorが発生します私のサブクラスで__getitem__
メソッドをオーバーライドしようとしましたが、このコードは機能しません。
def __getitem__(self,ind):
try:
numpy.recarray.__getitem__(self,ind)
except IndexError:
self.resize((self.__len__() + self._increment,),refcheck=False)
self.__getitem__(ind)
それは自動的にアレイを拡張んが、今、アレイ内のすべての項目はNone
あり、変更することはできません。
誰でも私が間違っていることを教えてもらえますか?
+1、 '*'、 '**'演算子をうまくキャッチします。 – senderle