2011-06-01 163 views
3

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

我的想法是在C++中创建一个类,它在安装时创建自己的数组副本(性能不如问题多),并且具有在数组上执行的方法并将数据返回给主Python程序。但是,我不知道如何实现这一点,即使这是适当的方式去做这样的事情;这似乎意味着让C++代码与主Python程序并行运行,直觉告诉我这是一个糟糕的主意。

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

回答

4

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

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

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

+0

支持,并没有适当的文件。你如何将矢量放入其中一个数组中? – CashCow 2013-01-08 12:02:56

+0

@CashCow:如果这是一个问题,我不明白。 – 2013-01-08 13:29:45