您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python / SWIG:输出数组

Python / SWIG:输出数组

这应该可以帮助您:

/* example.c */

float * oldmain() {
    static float output[] = {0.,1.};
    return output;
}

您将在此处返回一个指针,而swig不知道它的大小。普通的$ 1_dim0不起作用,因此您必须进行硬编码或做其他魔术。像这样:

/* example.i */
%module example
%{
 /* Put header files here or function declarations like below */
  extern float * oldmain();
%}

%typemap(out) float* oldmain {
  int i;
  //$1, $1_dim0, $1_dim1
  $result = PyList_New(2);
  for (i = 0; i < 2; i++) {
    PyObject *o = PyFloat_FromDouble((double) $1[i]);
    PyList_SetItem($result,i,o);
  }
}

%include "example.c"

然后在python中,您应该获得:

>> import example
>> example.oldmain()
[0.0, 1.0]

添加类型映射时,您可能会发现-debug-tmsearch非常方便,即

swig -python -debug-tmsearch example.i

在为寻找合适的“输出”型式时,应明确指出您的型式已被使用float *oldmain。另外,如果您只想访问c全局变量数组,则可以使用typemapvarout代替来完成相同的技巧out

python 2022/1/1 18:26:36 有184人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶