我一直在使用数字python / SWIG / C ++组合,使用着名的“numpy.i”SWIG模板文件(ARGOUTVIEW,INPLACE等阵列,请参阅:http://docs.scipy.org/doc/numpy-1.10.0/reference/swig.interface-file.html)。
然而,为了实际学习一些东西,我想为numpy数组创建我自己的typemap。首先,只是一些非常简单的事情:
我们在python中有一个字节缓冲区numpy数组,我们想以最简单的方式将它传递给C(++):C(++)获取指向bytebuffer的指针(是的我知道..垃圾收集..危险)。
我用以下的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),但我似乎误解了一些事情......没有一种奇怪的方法让这个#%@工作!救命啊!
答案 0 :(得分:2)
行。在分析了什么&#34; numpy.i&#34;是的,我找到了银弹:
$1=(uint8_t*)(PyArray_DATA((PyArrayObject*)$input));
抱歉垃圾邮件。