有人在这里问这个问题:Subclassing numpy ndarray problem但基本上没有答案。
这是我的问题版本。假设您将numpy.ndarray子类化为当您尝试将元素设置为超出当前形状时自动扩展的内容。您需要覆盖 setitem 并使用一些numpy.concatenate调用来构造一个新数组,然后以某种方式将其分配给“self”。如何将数组赋值为“self”?
class myArray(numpy.ndarray):
def __new__(cls, input_array):
obj = numpy.asarray(input_array).view(cls)
return(obj)
def __array_finalize__(self, obj):
if obj is None: return
try:
super(myArray, self).__setitem__(coords, value)
except IndexError as e:
logging.error("Adjusting array")
...
self = new_array # THIS IS WRONG
答案 0 :(得分:3)
为什么要子类?为什么不给你的包装器对象它自己的ndarray
数据成员并使用__getitem__
和__setitem__
来操作包装数据成员?这基本上是ndarray
已经做的事情,包装了Python的内置容器。另请查看Python Pandas,它已经在ndarray
之上执行了很多您正在谈论的内容。