[英]Automatically resizing 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
,無法更改。
誰能告訴我我在做什么錯?
首先,您在numpy.recarray.__init__
調用中缺少星號:
def __init__(self, *args, **kwargs):
self._increment = 1
numpy.recarray.__init__(self, *args, **kwargs)
其次,您在__getitem__
缺少return
語句:
def __getitem__(self,ind):
try:
return numpy.recarray.__getitem__(self,ind)
except IndexError:
self.resize((self.__len__() + self._increment,),refcheck=False)
return self.__getitem__(ind)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.