我想实现我自己的自定义类来存储数据。尝试使用时Python - 如何实现与NumPy函数兼容的自定义类?
np.sin(my_object)
我知道有一个叫__array_interface__
字典,但是我得到很多奇怪的错误:我希望把它与NumPy的兼容,所以,我可以打电话NumPy的功能,它是这样它。
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.
我缺少什么? 在另一方面大熊猫(哪些类与NumPy兼容)的源代码没有明确使用array_interface字典...
谢谢。是的 - 那是需要的。如果你想让numpy函数的结果成为你的自定义类型,你还必须添加__array_wrap__方法。 –
有时也有'__array_prepare__'。即将到来你附近的一个numpy:'__array_ufunc__',它对'__array_wrap__'做了更好的工作 – Eric