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

时间:2011-06-01 10:41:43

标签: c++ python dll multidimensional-array a-star

所以我目前的项目主要是在Python中,但我希望用C ++重写计算成本最高的部分来尝试提升性能。我可以通过从DLL文件加载的简单函数实现大部分功能,但不是所有功能。我在Python中有一个多维数组,我想在C ++中执行操作(特别是A *寻路),但我不确定如何翻译它们,并且不断地将数据一次一个地发送到加载的函数中效率低下(数组的前两个维度都是数百个,并且函数需要一次处理数组中的分数,如果不是数百个)。

我的想法是在C ++中创建一个类,它在安装时创建自己的数组副本(其中性能不是问题),并且具有在数组上执行的方法并将数据返回到主Python程序。但是,我不知道如何做到这一点,即使这是正确的方式来做这件事;这似乎意味着C ++代码与主Python程序并行运行,并且直觉告诉我这是一个坏主意。

我不太了解如何集成C ++和Python,除了如何通过Python中的cTypes加载简单函数,所以我真的很感激这里的一些指示。请记住,我对C ++相对较新;我的大部分编程经验都是Python。在这种情况下,将两者结合在一起的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

首先,当你在Python中使用多维数组时,你应该真正使用NumPy。当你让NumPy进行数字运算时,你的程序已经足够快了(使用数组算法代替Python for循环)。

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

如果它确实必须是C ++,我强烈建议使用Boost.Python。桥接Python和C ++从未如此简单。另外,Boost.Python还支持NumPy(boost::numeric::array)。

答案 1 :(得分:0)

看看Cython