将C ++中的浮点数组返回给Python

时间:2014-07-14 20:38:04

标签: python c++ extending

我相当确定我没有找到合适的地方,因为有关此主题的信息非常难以获得。

我在C ++中有一个小函数,Python将调用它并创建一小部分浮点数并将它们返回给Python。

首先,你似乎不能使用Py_BuildValue()在C ++中返回任意大小的数组作为Python中的列表(我不清楚为什么会这样)。旧的但仍然相关的帖子here建议实例化一个PyList对象,用数组中的元素填充它,然后返回它。

哪种解决方案可以接受。但是,我的数字是C ++样式浮点数。虽然Python库提供了充足的转换操作(C字符串 - > Python字符串,C double - > Python float等),但我找不到简单地将C ++ float转换为Python float的方法。我知道Python浮点数相当于C / C ++双精度数,所以我想我可以将浮点数转换为双精度数,然后通过PyFloat_FromDouble()转换为PyObject,但我觉得必须存在更直接的方法。

因为这是一个非常短的功能,并且在很大程度上是一个概念证明,我觉得没有必要花时间学习SWIG或Boost Python或其他一些东西;我想使用内置的Python / C ++ API执行此操作。任何建议将不胜感激!

1 个答案:

答案 0 :(得分:1)

由于Python float本质上是C double,因此转换必须在某个时刻发生。引用the reference

  

Python不支持单精度浮点数;处理器和内存使用的节省通常是使用它们的原因,这与使用Python中的对象的开销相形见绌,所以没有理由用两种浮点数复杂化语言。

所以转换为double(可能只是将值传递给接受double的函数)并且你已经设置了。

正如文本也指出的那样,python中的浮点值是对象,它带来了相当多的开销。 PyFloat_FromDouble将照顾好这一点。因此,通过该功能是正确的做法。同样适用于列表创建。