3

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

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

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

4

2 回答 2

4

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

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

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

于 2011-06-01T10:50:18.047 回答
0

看看Cython

于 2011-06-01T10:45:01.513 回答