小编H. *_*ier的帖子

如何定义自定义float-type numpy dtypes(C-API)

我有使用两个64位浮点数(两双类模拟128bit的浮筒的自定义浮点数据类型dd_realQD库).从C++我想导出一个ndarray到python.我已经知道如何为64位浮点数做这个,但是对于双倍的我需要指定我自己的自定义dtype.怎么做?

注意:numpy有自己的128位浮点数(np.float128),遗憾的是它映射到long doubleC/C++,它只是一个存储在128位(在我所有平台上)的80位浮点数.

实际上,应该能够以与numpy导出np.float128(我只是不知道如何完成)相同的方式完成此操作,唯一的区别是它dd_real在C++端使用而不是long double.

如果这有帮助,我已经将C++类型导出dd_real到python使用boost::python也许这可以以某种方式重用.


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

  1. 对于numpy的文件dtypes指的是 C-API如何导出自定义dtypes,但不知何故文件只解释了现有的dtypes不是如何创建新的.

  2. 浏览 stackoverflow时我发现了这个例子,但我想知道dd_real这是否更简单.我也看不到实际生成dtype的位置.也许只有在python __ init__ via中np.typeDict['quaternion'] = np.dtype(quaternion).当我想生成一个ndarray时,如何在C++中使用该dtype?

c++ python numpy boost-python

13
推荐指数
1
解决办法
2038
查看次数

递归显式模板实例化以导出库的符号

在我之前的问题中,我问过递归显式模板实例化是否可能.我看到它确实可能; 但是,此实例化仅在本地有效,递归实例化模板的符号不会导出到目标文件,因此不会出现在(共享)库中.所以我在这里更准确地提出问题,就像我之前的帖子一样:

给出一个类似的模板

template<int dim> class Point { ... };
Run Code Online (Sandbox Code Playgroud)

这个模板可以明确地实例化

template class Point<0>;
template class Point<1>;
template class Point<2>;
template class Point<3>;
Run Code Online (Sandbox Code Playgroud)

它将Point<0>...... 的符号导出Point<3>到当前翻译单元的目标文件中.我没有像上面那样单独实例化每个模板,而是想通过一次调用递归地实例化它们.

任何实现这一目标的解决方案都很好,无论是模板元编程的风格,还是通过辅助类

template class RecursiveInstantiate<Point, 3>;
Run Code Online (Sandbox Code Playgroud)

或通过预处理器.在这里,我研究了boost预处理器库,它似乎有一些循环结构.但是,我从未使用过boost预处理器库(任何建议都很受欢迎),但乍一看,如果循环可以与显式模板实例一起使用,我会持怀疑态度.

任何建议,也解释为什么我想要达到的目标是不可能的.


其实我感兴趣的概括这对于喜欢多个模板参数类Node<int i1,int i2,int i3>为I1,I2,I3的所有组合{0,1,2,3}.但我希望能够自己解决这第二部分.像往常一样,我想通过仅在一个转换单元中定义模板来使用显式实例化来加速编译时间,因此我需要将模板的方法导出到目标文件中.

我希望有一个独立于编译器的解决方案,但如果这不可能,我需要用于带有g ++/clang的Linux.


请参阅下文,了解我所获得的解决方案以及我从中获得的最终解决方案.

c++ templates boost-preprocessor

8
推荐指数
1
解决办法
1399
查看次数

递归显式模板实例化可能吗?

给出一个类似的模板

template<int dim> class Point { ... };
Run Code Online (Sandbox Code Playgroud)

这个模板可以明确地实例化

template class Point<0>;
template class Point<1>;
template class Point<2>;
template class Point<3>;
Run Code Online (Sandbox Code Playgroud)

而不是像上面那样单独实例化每个模板,我想用一个调用来递归地实例化它们

template class RecursiveInstantiate<Point, 3>;
Run Code Online (Sandbox Code Playgroud)

其中,RecursiveInstantiate<T, i>将实例T<i>,T<i-1>..., T<0>.是否有可能创建这样一个类RecursiveInstantiate?如果不可能,您是否知道使用预处理器的方法?

其实我感兴趣的概括这对于喜欢多个模板参数类Node<int i1,int i2,int i3>为I1,I2,I3的所有组合{0,1,2,3}.但我希望能够自己解决这第二部分.

任何建议,也解释为什么我想要达到的目标是不可能的.


更新:感谢您对目前的评论.我现在更清楚地看到问题的确切位置.这条线

template class Point<3>;
Run Code Online (Sandbox Code Playgroud)

实例化模板并将其符号导出到目标文件.表单的实例化

template class RecursiveInstantiate<Point, 3>;
Run Code Online (Sandbox Code Playgroud)

可以实例化类class Point<3>,class Point<2>....显然这只发生在本地.模板不会导出到目标文件.也许我将不得不使用预处理器寻找解决方案.

正如我现在所看到的那样,我在开始时并未完全提出我的问题,我感谢您的答案和选择的答案是正确的.

注意:我在linux上使用g ++/clang作为编译器进行尝试.

c++ templates

6
推荐指数
1
解决办法
1171
查看次数

doxygen 和“旧式”类列表

我注意到新版本的 doxygen(我有 1.8.1.1)会生成类列表,其中嵌套是分层完成的,例如:

  • 名称空间
    • 我的班级1
    • 我的班级2

例如http://www.itk.org/Doxygen/html/annotated.html

我更想要旧样式的类列表:

  • 命名空间::MyClass1
  • 命名空间::MyClass2

例如http://trilinos.sandia.gov/packages/docs/r10.8/packages/tpetra/doc/html/annotated.html

doxyfile 中是否有一个设置可以让我获得旧样式?


我提出这个请求的理由是,我通常通过搜索“namespace::MyClass”来搜索我的 C++ 类。通常,即使是“::My”也能很快找到正确的类。在新风格中我不再知道该怎么做。

c++ doxygen

5
推荐指数
1
解决办法
959
查看次数