[英]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.