【发布时间】:2023-03-12 09:24:01
【问题描述】:
据我了解,由于内存共享限制,不可能在 python 中公开返回向量 [T] 的 C++ 函数。 因此,有必要创建一个使用导入函数的第二个函数,并将其正确地暴露给 python 扩展模块。
问题是:我不能使用相同的函数名,并且我的扩展模块最终得到了许多奇怪的函数名。例如。看下面,C++函数的导入,然后是expose:
cdef extern from "somestuffs.h" namespace "stf":
cdef vector[float] stufffn(int n)
cpdef np.ndarray[np.float64_t, ndim=1] pystufffn(int n):
return np.asarray(stufffn(n))
有没有办法直接公开函数 stufffn 而不使用附加函数? 有没有办法在扩展中保留名称“stufffn”并避免使用“pystufffn”?
请注意,由于我正在为现有库构建包装器,因此无法重命名某些代码。
提前感谢您的任何回答。
【问题讨论】:
-
您可以使用 boost python 将 c++ 类和函数公开给 python。是的,您可以将向量从 c++ 函数返回给 python。只有你必须将向量类型也暴露给 python 模块。
-
我现在正在发现 boost python,看起来很棒。你的最后两句话有什么指针/参考/例子吗?
-
另见 pybind11,本质上是一个“现代”(利用 c++11)版本的 Boost.Python pybind11.readthedocs.io/en/stable/intro.html
-
pybind11 是进行这种包装的简单方法。