【发布时间】:2015-12-28 08:56:40
【问题描述】:
我正在用 C++ 编写一个模拟程序,并决定将 embedding it 的一些数组的初始化委托给 Python 到我的应用程序中,并使用一些 Python 函数来生成初始数据。
由于我的 2D/3D 数组是由 C++ 部分分配和管理的,因此我需要将它们传递给 Python。最好的方法可能是buffer protocol。我可以用 C++ 编写一个 Python 类,它实现了缓冲区协议,并为我在 C++ 中的存储创建了一个缓冲区对象。
现在,我想避免过度设计此过程。事实上,我只需要将一个指针、一个大小和步幅的元组传递给 Python 函数。
因此,问题是:将此信息传递给 Python 例程的最简单方法是什么,然后 Python 例程可以使用它(可能与 Numpy 一起使用)来初始化指向的存储?
举个例子说明我需要做什么,我想从 C++ 调用的 Python 函数是:
def init_field(field, X, Y):
field[:, :] = np.sqrt(X) + np.tanh(Y)
其中X 和Y 是由Python 创建并由C++ 应用程序借用的numpy 数组,field 正是这个由C++ 管理的二维数组。我当然可以用一个或多个参数替换field,这些参数携带有关指针、大小和步幅的信息,并构造numpy数组。我该怎么做?
【问题讨论】:
-
Python 存在一个boost library。你调查过吗? (请注意,我没有,我只是好奇你是否有,因为你正在寻找一个简单的集成。)
-
是的,我知道那个库,但它似乎对我的情况没有直接帮助。困难的不是真正与 Python 交互,而是让它理解我拥有的指针和数据结构。有一个boost::python version of the numpy C interface,但我不知道它的维护和面向未来的程度如何。我想避免过多的依赖,因为我将部署此代码的系统不是很简单。
标签: python c++ arrays numpy interop