Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何定义自定义浮点类型numpy数据类型(C-API)_C++_Python_Numpy_Boost Python - Fatal编程技术网

C++ 如何定义自定义浮点类型numpy数据类型(C-API)

C++ 如何定义自定义浮点类型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

我有一个自定义的浮点数据类型,它使用两个64位浮点模拟128位浮点(来自的double-double-class
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> >也许这可以被重用。


到目前为止,我能够研究以下内容

  • 的numpy文档介绍了如何导出自定义数据类型,但该文档只是解释了现有的数据类型,而不是如何创建新的数据类型

  • 当stackoverflow出现时,我找到了一个例子,但我想知道对于
    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。