python numpy中的子类ndarray:更改数组的大小和值

python numpy中的子类ndarray:更改数组的大小和值,numpy,subclass,multidimensional-array,Numpy,Subclass,Multidimensional Array,有人在这里问这个问题:但基本上没有答案 这是我对这个问题的看法。假设您将numpy.ndarray子类化为当您尝试设置超出当前形状的元素时自动展开的某个对象。您需要覆盖setitem,并使用一些numpy.concatenate调用来构造一个新数组,然后以某种方式将其分配给“self”。如何将数组分配给“self” 为什么是子类?为什么不给包装器对象一个自己的数据成员,它是ndarray,并使用\uuu getitem\uuuuuuuu和\uuuu setitem\uuuuuuu对包装的数据成员

有人在这里问这个问题:但基本上没有答案

这是我对这个问题的看法。假设您将numpy.ndarray子类化为当您尝试设置超出当前形状的元素时自动展开的某个对象。您需要覆盖setitem,并使用一些numpy.concatenate调用来构造一个新数组,然后以某种方式将其分配给“self”。如何将数组分配给“self”


为什么是子类?为什么不给包装器对象一个自己的数据成员,它是
ndarray
,并使用
\uuu getitem\uuuuuuuu
\uuuu setitem\uuuuuuu
对包装的数据成员进行操作呢?这基本上就是
ndarray
已经在做的事情,包装Python的内置容器。另外,看看在
ndarray

的基础上,哪些功能已经完成了很多您正在谈论的内容,对self的赋值似乎只是胡说八道,如何支持您替换对象?此外,使用numpy数组执行此操作将使数组的视图无效。你不能用一个子类来做这件事,这是有原因的。resize限制性太强了……是的,这就是我目前正在做的。但是我必须手动包装所有我想向类公开的ndarray(我是指数组)属性和函数,对吗?例如,我必须在类定义中实现“repr”。这些都很简单,但我认为绕过这一点就是子类化的意义。也许还有别的把戏?巨蟒熊猫太棒了!我正在尝试更多地使用它。如果您想要基础数据的
\uuuuuurepr\uuuu
,您应该能够调用
MyClass.data.\uuuuuurepr\uuuuu
。我可以想象,包装它只需要为几个
ndarray
默认值做额外的工作。大多数代码不应该尝试执行类似于
MyClass.sum()
的操作,而应该执行
MyClass.data.sum()
等操作。。。
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