【发布时间】:2011-06-19 21:57:16
【问题描述】:
我想创建一个 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,并且无法更改。
谁能告诉我我做错了什么?
【问题讨论】:
标签: python numpy subclassing