我有一个简单的类,它继承自 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])