仅将元数据添加到numpy.array的一个维度

时间:2015-07-18 15:46:06

标签: python arrays numpy subclassing

我有几个二维数据集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这样的东西。有没有办法实现这样的目标?

0 个答案:

没有答案