将c++中的浮点数数组返回给Python
Return an array of floats in C++ to Python
我很确定我没有在正确的地方寻找,因为关于这个主题的信息非常难以获得。
我在c++中有一个小函数,Python会调用它,它会创建一个小的浮点数数组并将它们返回给Python。
首先,似乎你不能使用Py_BuildValue()在c++中作为Python中的列表返回任意大小的数组(我不清楚为什么应该这样做)。这里有一篇旧的但仍然相关的文章建议实例化一个PyList对象,用数组中的元素填充它,然后返回它。
这是一个可以接受的解决方案。然而,我的数字是c++风格的浮点数。虽然Python库提供了充足的转换操作(C string -> Python string, C double -> Python float等),但我找不到一种方法来简单地将c++ float转换为Python float。我知道Python浮点数相当于C/c++的双精度,所以我想我可以将浮点数转换为双精度,然后通过PyFloat_FromDouble()转换为PyObject,但我觉得必须存在更直接的方法来做到这一点。
因为这是一个非常短的函数,很大程度上是一个概念证明,我觉得没有必要花时间学习SWIG或Boost Python或诸如此类的东西;我想用内置的Python/c++ API来做到这一点。任何建议将非常感激!
由于Python float
本质上是C double
,因此转换必须在某个点发生。引用引用:
Python不支持单精度浮点数;与Python中使用对象的开销相比,使用这些通常是为了节省处理器和内存使用,因此没有理由用两种浮点数使语言复杂化。
因此转换为double
(可能只是通过将值传递给接受double
的函数),然后您就可以设置了。
正如文本所示,python中的浮点值是对象,这带来了相当大的开销。PyFloat_FromDouble
将照顾得到正确的。所以遍历这个函数是正确的。创建列表也是如此。
- 从python中调用C++函数并获取返回值
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- C++返回 Numpy 数组的 Python 扩展模块
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 创建一个函数的 Python 绑定,返回指向带有 boost 的向量的指针
- 使用 Main() 返回值作为 python 脚本的参数
- std::endl,在 Python 中是否有等价物?(返回 + 刷新)
- C++ python 中的函数返回数字而不是字符串
- Python os.system() 返回错误值
- 从 C++ 函数与 Python 函数返回的不一致值用于偏斜正态分布
- 为什么同一个逻辑方程在python和c++中返回两个不同的结果
- 更改 Python 切换的 C 函数的返回值类型
- C++ & Python:传递并返回从 python 到 c++ 的 2D 双指针数组
- 如何将 Python 对象转换为 Cython 扩展类型的 std::vector 并返回?
- 如何将 cv::mat 对象从 python 模块传递到 c++ 函数并返回返回的 cv::mat 类型为对象?
- 如何让 SWIG 返回 Python 2 中字符串的 unicode 对象
- 从动态库交互式调用函数,无需等待返回(python,ctypes)
- 引用从 Python 传递到 Boost::p ython 并返回 Python
- 如何从C++返回 Python 类型的实例
- 返回python中的c++对象(最好不是指针)