我有几个二维数据集numpy.array
。我将array
子类化为我可以通过MyArray.MyAttribtue
访问的每个数据集添加其他元数据。
我的子类的(非常简短的)代码如下所示:
class MyArray(np.ndarray):
_attributes = {"orig_file": None,
"protocol": None
# plus many more...
}
_datatype = {'names': ['phase', 'mask'],
'formats': [np.float32, np.bool_]
# plus a few more...
}
def __new__(cls, input_array, mask=None, **keypar):
# cast to custom class
obj = np.asarray(input_array, dtype=cls._datatype).view(cls)
if mask is None:
mask = True
if input_array.dtype != cls._datatype:
obj['mask'] = mask
# add attributes
for attr in keypar:
if attr in cls._attributes:
setattr(obj, attr, keypar[attr])
for attr in cls._attributes:
try:
getattr(cls, attr)
except AttributeError:
setattr(cls, attr, cls._attributes[attr])
# return new object
return obj
def __array_finalize__(self, obj):
if obj is None:
return
for attr in self._attributes:
setattr(self, attr, getattr(obj, attr, self._attributes[attr]))
def __array_wrap__(self, obj, context=None):
return obj.view(type(self))
现在我想将这些数据集中的几个组合成一个三维数组,同时保持每个集合的元数据。
我不希望有一个2d数组的列表,因为我希望能够在每个方向上执行数组例程(例如MyArray.mean()
和类似的东西),我在我的子类中进行了更改。
我想我可以将元数据保存在类中的列表中并像MyThreeDimArray.MyAttribute[0]
一样访问它,但理想情况下,我希望能够以与以前类似的方式访问这些数据,基本上这样做像MyThreeDimArray[0].MyAttribute
这样的东西。有没有办法实现这样的目标?