我有一个自定义命令:
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__
?我已经看过了文档,但并不真正理解它。
1条答案
按热度按时间qojgxg4l1#
我找到了解决办法。我的班级现在是:
Numpy首先检查属性
__array_interface__
和__array_struct__
是否存在,如果不存在,则福尔斯返回__array__
。前两个可以用来指定复杂情况下的数组表示,但在这种情况下,它非常简单,我只想返回一个数组,其中唯一的项是CustomDict
的标准dict表示,因此是np.array(self.__dict__())
。对于一个稍微复杂一点的情况,请参阅https://stackoverflow.com/a/77046584/7705804,这是对我另一个类似问题的回答。