gpt4 book ai didi

python - 自动调整 NumPy recarray 的大小

转载 作者:行者123 更新时间:2023-11-28 22:04:50 25 4
gpt4 key购买 nike

我想创建一个 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)

关于python - 自动调整 NumPy recarray 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6405342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com