【发布时间】:2016-02-03 19:19:50
【问题描述】:
我一直在使用数字 python/SWIG/C++ 组合,使用著名的“numpy.i”SWIG 模板文件(ARGOUTVIEW、INPLACE 等数组,请参阅:http://docs.scipy.org/doc/numpy-1.10.0/reference/swig.interface-file.html)。
但是,为了真正学习一些东西,我想为 numpy 数组创建我自己的类型映射。首先,很简单:
我们在python中有一个字节缓冲区numpy数组,我们想以最简单的方式将它传递给C(++):C(++)获得指向字节缓冲区的指针(是的,我知道..垃圾收集..危险)。
我已经使用以下 swig 代码进行了尝试(注释掉的行和活动行都没有效果):
%typemap(in) (uint8_t* bytebuffer) {
PyObject* x_array = PyArray_FROM_OTF($input, NPY_UINT8, NPY_ARRAY_IN_ARRAY);
// PyArray* x_array = PyArray_FROM_OTF($input, NPY_UINT8, NPY_ARRAY_IN_ARRAY);
// PyObject* x_array = PyArray_FROM_O($input);
// $1 = (uint8_t*)PyArray_DATA(x_array);
// $1 = (uint8_t*)PyArray_DATA($input);
$1 = static_cast<uint8_t*>(PyArray_DATA($input));
}
我得到了每个案例,比如:
error: cannot convert ‘PyObject* {aka _object*}’ to ‘PyArrayObject* {aka tagPyArrayObject*}’ for argument ‘1’ to ‘void* PyArray_DATA(PyArrayObject*)’
我已经阅读了一些 numpy api(请参阅:http://docs.scipy.org/doc/numpy-1.10.0/reference/c-api.array.html#array-structure-and-data-access),但我似乎误解了一些东西.. 没有什么可怕的方法可以让这个 #%@ 工作!救命!
【问题讨论】:
标签: python c++ arrays numpy swig