私は自分のカスタムクラスを実装してデータを格納しようとしています。私はこのようにそれにnumpyの関数を呼び出すことができるように、numpyのと互換性を持たせるにしたい:Python - 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.
は、私が何をしないのですか? 一方(クラスがnumpyの互換性があります)パンダのソースコードは、明示的にarray_interface辞書を使用していません...
ありがとうございます。はい、それが必要でした。また、numpy関数の結果を独自の型にしたい場合は、__array_wrap__メソッドを追加する必要があります。 –
時には '__array_prepare__'もあります。すぐ近くのあなたに近づく: '__array_ufunc__'は、' __array_wrap__'が行うことのより良い仕事をします – Eric