从 NumPy 数组继承的类如何更改自己的值



我有一个简单的类,它继承自 NumPy n 维数组。我想有两个可以更改类实例的数组值的类方法。其中一个方法应将类实例的数组设置为类实例的列表数据属性的值,另一个方法应将一些列表值追加到类实例的数组中。我不确定如何完成此操作,但我的尝试如下:

import numpy
class Variable(numpy.ndarray):
    def __new__(cls, name = "zappo"):
        self = numpy.asarray([]).view(cls)
        self._values            = [1, 2, 3] # list of values
        return(self)
    def updateNumPyArrayWithValues(self):
        self = numpy.asarray(self._values)
    def appendToNumPyArray(self):
        self = numpy.append(self, [4, 5, 6])
a = Variable()
print(a)
a.updateNumPyArrayWithValues()
print(a)

作为一个快速的、先发制人的问题,这个类能否在标准的 NumPy 数组操作中幸存下来,如下所示?

>>> v1 = np.array([23, 20, 13, 24, 25, 28, 26, 17, 18, 29])
>>> v1 = v1[v1 >= 20]

那么,我可以对我的类做类似的事情并保留它的所有数据属性吗?

你可以

这样做:

class Variable(np.ndarray):
    def __new__(cls, a):
        obj = np.asarray(a).view(cls)
        return obj
    def updateNumPyArrayWithValues(self):
        self[1] = 1
        return self
>>> v = Variable([1,2,3])
>>> v
Variable([1, 2, 3])
>>> v.updateNumPyArrayWithValues()
Variable([1, 1, 3])
>>> v[v>1]
Variable([3])

最新更新