我想創建一個numpy.recarray的子類,當數據添加到當前長度以外的行時,它會自動調整大小。自動調整大小的NumPy recarray
下面的代碼可以完成我想要的大部分功能。
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 = utils.autorecarray((1,),formats=['i4','i4'])
a[1] = (1,2) # len(a) will now be 2
然而,這種用法將提高對numpy.core.records.recarray __getitem__
方法的IndexError:
a[2]['f1'] = 3
我最初的嘗試還要覆蓋我的子類中的__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