C++ 如何定义自定义浮点类型numpy数据类型(C-API)
我有一个自定义的浮点数据类型,它使用两个64位浮点模拟128位浮点(来自的double-double-classC++ 如何定义自定义浮点类型numpy数据类型(C-API),c++,python,numpy,boost-python,C++,Python,Numpy,Boost Python,我有一个自定义的浮点数据类型,它使用两个64位浮点模拟128位浮点(来自的double-double-classdd_-real)。从C++中,我想导出一个NDAREL到Python。我已经知道如何处理64位浮点,但对于双精度浮点,我需要指定自己的自定义数据类型。怎么做 注意:numpy有自己的128位浮点(np.float128),不幸的是,这映射到了C/C++中的long double,这只是一个存储在128位中的80位浮点(在我所有的平台上) 实际上,我们应该能够用NUMPI出口NPFLA
dd_-real
)。从C++中,我想导出一个NDAREL到Python。我已经知道如何处理64位浮点,但对于双精度浮点,我需要指定自己的自定义数据类型。怎么做
注意:numpy有自己的128位浮点(np.float128),不幸的是,这映射到了C/C++中的long double
,这只是一个存储在128位中的80位浮点(在我所有的平台上)
实际上,我们应该能够用NUMPI出口NPFLAT128(我不知道如何做)的方式来做这件事,唯一的区别是它在C++端使用了代码> DDFALLUT/CODE> >而不是<代码> long double < /C> >
如果这有帮助,我已经使用C++代码> < DuffReals>代码>使用Python使用<代码> Boo::Python < /Cord> >也许这可以被重用。
到目前为止,我能够研究以下内容
dd\u real
来说,这是否更简单。我也不知道数据类型是在哪里生成的。可能仅在python中通过np.typeDict['quaternion']=np.dtype(quaternion)
。如何在C++中使用DyType当我要生成NDARRAY?< /P> 您链接到的存储库
https://github.com/numpy/numpy-dtypes
可能包含关于如何向Numpy添加新数据类型的最简单示例。我不知道有什么更简单的方法。注意这些文件中对register\u cast\u函数
和register\u UFUNC
的调用:它们告诉Numpy如何在一个元素一个元素的级别上处理乘法和强制转换等操作
但是,如果您实际上只想导出数据,则可以将其导出为一个double数组,或者将两个double绑定到一个数据类型
np.dtype([('a', double), ('b', double)])
然后,您需要编写单独的函数来对这些数组执行操作(因为
arr1*arr2
不会执行您想要的操作)。一种可能的方法是进一步执行,也使<代码> ARR1*ARR2<代码>工作,将是子类<代码> NP.NDARLYE/COD>您的数据类型,重写<代码> > MulySu< <代码>等操作。< /P>什么是C++中的代码> NP.Dype(…)<代码>?用元组构造列表,并调用<代码> PyRayayDeCurrase。但是,在Python端输出一个双打数组可能更容易,我需要从C++构建一个NDAREL,因为我需要C++中的DyType。