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

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

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

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

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

最佳答案

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

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

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

关于c++ - 与 Python 一起运行 C++ 代码并与之交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6199872/

相关文章:

c++ - std::next_permutation() 来自 vector 的一部分

c# - C# 程序在哪里寻找 DLL?

c++ - 如何在C++中创建使用给定伪代码递归的可变参数函数?

Python getattr() 以另一个属性作为默认值

python - AttributeError: 'builtin_function_or_method'对象没有属性 'get'

python - Pandas:如何在 DataFrame 中按行比较列表的列与 Pandas(不是 for 循环)?

c++ - 您如何向插件库公开功能?

C++ - 如何使显式导入的 DLL 函数对其他类可用

c++ - Qt4,直接分配 QPainterPath 不起作用( Unresolved external 问题)

c++ - C++ 中的 OpenCV Canny 视频边缘检测