Python - 如何实现与NumPy函数兼容的自定义类?

时间:2017-04-19 10:35:40

标签: python arrays class numpy interface

我正在尝试实现自己的自定义类来存储数据。我想让它与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 ......

2 个答案:

答案 0 :(得分:1)

一个简单的解决方法是实现

def __array__(self):
    return self.ddata

答案 1 :(得分:0)

您无法访问存储在对象中的数据。变量tdf1只是TDF实例,但数据存储在tdf1.ddata中。尝试拨打np.sin(tdf1.ddata)