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

时间:2012-10-03 21:28:40

标签: numpy subclass multidimensional-array

有人在这里问这个问题: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

1 个答案:

答案 0 :(得分:3)

为什么要子类?为什么不给你的包装器对象它自己的ndarray数据成员并使用__getitem____setitem__来操作包装数据成员?这基本上是ndarray已经做的事情,包装了Python的内置容器。另请查看Python Pandas,它已经在ndarray之上执行了很多您正在谈论的内容。