假设我得到一个如下的函数
void myFunc(int *a){
a[0]++;
a[1]++;
}
我尝试将此函数与下面的
#include "pybind11/numpy.h"
#include "pybind11/pybind11.h"
namespace py = pybind11;
PYBIND11_MODULE(pybindtest, m) {
m.def("myFunc", [](py::array_t<int> buffer){
py::buffer_info info = buffer.request();
myFunc(static_cast<int *>(info.ptr));
});
}
并使用下面的python代码进行测试
import pybindtest
a=[1,2];
pybindtest.myFunc(a);
print(a)
这显示的是[1, 2]
,而不是[2, 3]
。鉴于myFunc
是由其他人编写的,因此我不允许更改API。是否可以将此函数绑定到python中?如果是,我做错了什么
在python脚本中试试这个
问题在于
a
是一个python列表,而不是一个int数组。默认情况下,pybind11将把列表转换成合适的数组-请参阅docs中关于py::array::forcecast
的部分。但这样做会创建一个副本,并在该副本上执行myFunc
中的增量相关问题 更多 >
编程相关推荐