【问题标题】:Creating a simple SWIG typemap for numpy为 numpy 创建一个简单的 SWIG 类型映射
【发布时间】: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


    【解决方案1】:

    好的。在分析了“numpy.i”的作用后,我发现了灵丹妙药:

    $1=(uint8_t*)(PyArray_DATA((PyArrayObject*)$input));
    

    对垃圾邮件感到抱歉。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      相关资源
      最近更新 更多