【问题标题】:Fastest way to interface simple C++ function with Python将简单 C++ 函数与 Python 接口的最快方法
【发布时间】:2019-05-12 22:12:08
【问题描述】:

我有一个 C++ 函数,它接收 std::vector<std::vector<double> > X 并对 X 执行一些操作并输出 std::vector<std::vector<double> > X_mod

我希望能够快速创建一个接口,以便我可以将 Python numpy 数组传递给这个 C++ 函数,然后让 C++ 函数将 X_mod 返回到 Python。

我已经简要了解了 Boost,对于这个简单的目的来说它似乎太复杂了?

关于如何为此编写快速界面的任何其他建议?

【问题讨论】:

  • 我自己还没用过,不过用CFFI我觉得应该挺简单的。有关 numpy 数组的详细信息,请参阅 this answer
  • 谢谢。我会检查一下。但我想我实际上会使用 Boost。问题是我真的找不到很好的教程,而且我没有包装经验。
  • 试试 pybind11,link
  • 你也有数据类型问题。 numpy 数组与std::vector<std::vector<double>> 完全不同,因此您必须复制所有数据。我会使用具有buffer protocol 支持和支持stl containerpybind11

标签: python c++ interface wrapper


【解决方案1】:

如 cmets 中所建议,Pybind11 可用于为 python Pybind DocumentationPybind Github Repo 编写 c++ 绑定, Example how to use it.

每个人都提出 Pybind 而不是 Boost 的原因可以在他们的自述文件中找到:

Boost.Python 的主要问题——以及创建这样一个类似项目的原因——是 Boost。 Boost 是一个庞大而复杂的实用程序库套件,几乎可以与现有的所有 C++ 编译器一起使用。这种兼容性是有代价的:奥秘的模板技巧和变通方法是支持最古老和最多错误的编译器样本所必需的。现在兼容 C++11 的编译器已经广泛使用,这种重型机器已成为一个过大且不必要的依赖项。

【讨论】:

    猜你喜欢
    • 2011-12-03
    • 1970-01-01
    • 2016-03-31
    • 2019-06-26
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 2011-01-11
    相关资源
    最近更新 更多