2つの64ビットfloat( QDライブラリdd_real
のdouble-doubleクラス)を使用して128ビットfloatをエミュレートするカスタムfloatデータ型があります。C++からndarrayをpythonにエクスポートしたいと思います。64ビットフロートの場合はこれを行う方法をすでに知っていますが、ダブルダブルの場合はどういうわけか独自のカスタムdtypeを指定する必要があります。どうやってするか?
注:numpyには独自の128ビットfloat(np.float128)がありますが、残念ながら、これlong double
はC / C ++にマップされます。これは、128ビットに格納された80ビットfloatにすぎません(すべてのプラットフォームで)。
実際、numpyがnp.float128をエクスポートするのとまったく同じ方法でこれを実行できるはずです(これがどのように行われるかはわかりません)がdd_real
、C++側で.の代わりに使用する唯一の違いがありlong double
ます。
これが役に立ったら、私はすでにC ++タイプdd_real
をPythonにエクスポートしましたが、boost::python
これはどういうわけか再利用できるかもしれません。
これまでのところ、私は以下を研究することができました
dtypesのnumpyドキュメントは、カスタムdtypesをエクスポートする方法についてC-APIを参照して いますが、そのドキュメントは、新しいdtypesを作成する方法ではなく、既存のdtypesを説明しているだけです。
stackoverflowを閲覧しているときにこの
dd_real
例を見つけましたが、これはもっと簡単なのではないかと思います。また、dtypeが実際に生成される場所もわかりません。たぶん、Python__init__でのみnp.typeDict['quaternion'] = np.dtype(quaternion)
。ndarrayを生成したいときにC++でそのdtypeを使用するにはどうすればよいですか?