我正在尝试实现自己的自定义类来存储数据。我想让它与NumPy兼容,以便我可以像这样调用NumPy函数:
np.sin(my_object)
我知道有一个名为__array_interface__
的字典,但是在尝试使用它时会遇到很多奇怪的错误。
import numpy as np
import pandas as pd
class TDF:
__array_interface__ = {'typestr': '|i1', 'version': 1}
def __init__(self):
self.ddata = pd.DataFrame([1, 2, 3])
self.shape = self.ddata.shape
def __iter__(self):
return iter(self.ddata)
def __len__(self):
return len(self.ddata)
def __getitem__(self, key):
return self.ddata.__getitem__(key)
if __name__ == '__main__':
tdf1 = TDF()
tdf = np.sin(tdf1)
上面的代码给出了一个运行时错误:
ValueError: setting an array element with a sequence.
我错过了什么? 另一方面,pandas的源代码(哪些类与NumPy兼容)没有明确使用 array_interface dict ......
答案 0 :(得分:1)
一个简单的解决方法是实现
def __array__(self):
return self.ddata
答案 1 :(得分:0)
您无法访问存储在对象中的数据。变量tdf1
只是TDF实例,但数据存储在tdf1.ddata
中。尝试拨打np.sin(tdf1.ddata)