我想创建一个继承自 NumPy ndarray 的类,并且我希望以这样一种方式执行此操作,即我不需要在实例化时为数组提供值,但可以将其默认为某个值。我在让它工作时遇到了一些困难:
import numpy
class Variable(numpy.ndarray):
def __init__(
self,
name = "trk_pt",
tree = None, # tree object
eventNumber = None,
eventWeight = None,
numberOfBins = None, # binning
binningLogicSystem = None, # binning
):
# arguments
self._name = name
self.tree = tree
self.eventNumber = eventNumber
self.eventWeight = eventWeight
self.numberOfBins = numberOfBins
self.binningLogicSystem = binningLogicSystem
# internal
self.variableObject = None
self.variableType = None
self.dataType = None
self.variableDataTypes = None
self.canvas = None
self.histogram = None
self._values = [] # list of values
self._valuesRaw = [] # list of unmodified, raw values
# NumPy ndarray inheritance
#self = ([1])
if sys.version_info >= (3, 0):
super().__init__([1])
else:
super(numpy.ndarray, self).__init__([1])
a = Variable()
我遇到的错误如下:
TypeError: Required argument 'shape' (pos 1) not found
如何编写代码,使数组在实例化时具有默认值并且不需要值?
最佳答案
使用 this example from the docs as a guide , 你可以使用
self = np.asarray([1]).view(cls)
在__new__
中实例化数组:
import numpy as np
class Variable(np.ndarray):
def __new__(
cls,
name = "trk_pt",
tree = None, # tree object
eventNumber = None,
eventWeight = None,
numberOfBins = None, # binning
binningLogicSystem = None, # binning
):
self = np.asarray([1]).view(cls)
self._name = name
self.tree = tree
self.eventNumber = eventNumber
self.eventWeight = eventWeight
self.numberOfBins = numberOfBins
self.binningLogicSystem = binningLogicSystem
...
return self
a = Variable()
还要注意 help(np.ndarray)
说
No
__init__
method is needed because the array is fully initialized after the__new__
method.
关于python - 应该如何创建一个继承自 NumPy ndarray 并具有默认值的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27557029/