numpy 使__array_interface__返回自定义dict的正确内容

6ljaweal  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(89)

我有一个自定义命令:

class CustomDict(dict):
    @property
    def __array_interface__(self):
        return {
            'version': 3,
            'typestr': '<f8',
            'data': (id(self), False),
            'shape': (len(self),),
        }

打电话时

custom_data = CustomDict({'a': 1.0, 'b': 2.0, 'c': 3.0})
numpy_array = numpy.array(custom_data)

我得到[1.4821969e-323 1.2284441e-311 1.4821969e-323]
结果应该是array({'a': 1.0, 'b': 2.0, 'c': 3.0}, dtype=object),就像调用numpy.array({'a': 1.0, 'b': 2.0, 'c': 3.0})一样。
如何更改__array_interface__?我已经看过了文档,但并不真正理解它。

qojgxg4l

qojgxg4l1#

我找到了解决办法。我的班级现在是:

class CustomDict(dict):
    def __dict__(self):
        # return custom dict as type normal dict
        out_dict = dict()
        for key, value in self.items():
            out_dict[key] = value
        return out_dict

    def __array__(self):
        return np.array(self.__dict__())

Numpy首先检查属性__array_interface____array_struct__是否存在,如果不存在,则福尔斯返回__array__。前两个可以用来指定复杂情况下的数组表示,但在这种情况下,它非常简单,我只想返回一个数组,其中唯一的项是CustomDict的标准dict表示,因此是np.array(self.__dict__())
对于一个稍微复杂一点的情况,请参阅https://stackoverflow.com/a/77046584/7705804,这是对我另一个类似问题的回答。

相关问题