首先让我声明一下,我是在经过大量研究后提出这个问题的,并且没有找到任何直接且逐步的示例。
已阅读 Cython、SWIG、Boostpython 文档,但无法获得逐步过程,因此在此发布 -
我有一个 .cpp 和 .h 文件,其中定义了几个数学函数。我想在 python (.py) 代码文件中调用它们。
我如何集成?这是最好、最简洁的方法。请说明
最佳答案
由于我最终使用此处提供的一些帮助和研究解决了这个问题,所以让我发布答案。
我使用 Cython 通过 Python 导入了 CPP 函数。
Cython 用 CPP 文件包装 Python 代码并编译两者。结果是一个Python模块(模块的名称可以在setup.py文件中指定)并且可以像往常一样调用该模块。
我面临的问题是从 Python 调用 CPP 函数。所以这里是我解决这个问题的技巧
- 在 C++ 头文件和 CPP 文件中定义您的函数。
- 使用 cdef ,在导入模块的开头定义 Python 脚本中的函数,定义其他变量。此定义类似于 C++ 头文件定义
- 将参数和数组传递到 python 的函数调用时,请确保所有变量和数组都进行类型转换为 CPP。
- 对于数组来说,这有点棘手。例如。 Python 中的 double 组可以使用 array.array(array_to_cast) 进行类型转换。在以下示例中,我们将 python 数组
dev
转换为 C++ 数组dev_arr
。 请注意,dev
在 python 中是一个 double 类型的数组,因此array.array()
输入的第一个参数是“d”。
cdef array.array dev_arr = array.array('d',dev)
将 dev_arr
数组传递给主 CPP 函数时,您必须指定此数组:data.as_doubles
fn_response = cpp_fn_call(stddev_arr.data.as_doubles,...)
休息后工作会顺利。
关于python - 将 .cpp 文件中的函数导入到 python 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28831637/