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

d3p*_*3pd 3 python arrays inheritance numpy self

我有一个从 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)
Run Code Online (Sandbox Code Playgroud)

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

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

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

ely*_*ase 9

你可以这样做:

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])
Run Code Online (Sandbox Code Playgroud)