与Python一起运行C++代码并与之交互

Running C++ code alongside and interacting with Python

本文关键字:交互 代码 C++ Python 一起 运行      更新时间:2023-10-16

所以我目前的项目主要是用Python编写的,但我希望用C++重写计算成本最高的部分,以尝试提高性能。我可以通过从DLL文件加载的简单函数来实现大部分功能,但不是所有功能。我在Python中有一个多维数组,我想在C++中对它执行操作(特别是a*路径查找),但我真的不知道如何翻译它们,并且不断地将数据一次一个地发送到加载的函数中似乎真的很低效(数组的前两个维度都在几百以内,函数一次需要处理数组中的几十个元素,如果不是几百个的话)。

我的想法是在C++中有一个类,它在设置时创建自己的数组副本(在那里性能没有那么大问题),并具有对数组执行并将数据返回到主Python程序的方法。然而,我不确定如何做到这一点,即使这是做这件事的正确方式;这似乎意味着让C++代码与主Python程序并行运行,直觉告诉我这是个坏主意。

除了如何在Python中通过cTypes加载简单函数之外,我对集成C++和Python不太了解,所以我非常感谢这里的一些指针。请记住,我对C++还比较陌生;我的大部分编程经验都是用Python编写的。在这种情况下,将两者结合在一起的最佳方式是什么?

首先,当您在Python中使用多维数组时,您应该真正使用NumPy。当您让NumPy进行数字运算(使用Array算术而不是Python for循环)时,您的程序可能已经足够快了。

如果这还不够,可以考虑使用Cython编写部分程序。Cython还支持NumPy数组,并提供了一种使用类似Python语法编写C代码的轻松方法。

如果真的必须是C++,我强烈建议使用Boost.Python。连接Python和C++从来没有这么容易。此外,Boost.Python还支持NumPy(boost::numeric::array)。

看看Cython。