Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用numpy.i和swig访问int16阵列_Python_C_Numpy_Swig - Fatal编程技术网

Python 使用numpy.i和swig访问int16阵列

Python 使用numpy.i和swig访问int16阵列,python,c,numpy,swig,Python,C,Numpy,Swig,以下来自c结构的内容已经用swig包装,这样我就可以用python访问从另一个swig包装的程序中获取的数据 struct RadarParm { struct { char major; char minor; } revision; struct { char code; char *time; char *command; } origin; int16 cp; int16 stid; int16 *pulse; int

以下来自c结构的内容已经用swig包装,这样我就可以用python访问从另一个swig包装的程序中获取的数据

struct RadarParm {
  struct {
    char major;
    char minor;
  } revision;

  struct {
   char code;
   char *time;
   char *command;
  } origin;

  int16 cp;
  int16 stid;
  int16 *pulse;
  int16 *lag[2]; 
  char *combf;
};
我的主要问题是int16*lag[2]。尝试使用以下命令读取python代码中的数据时:

p_data['lag'] = prm.lag
其中,prm是通过struct RadarParm*getRadarParm()方法从rtserver.c文件返回的RadarParm类型,p_数据是一个python字典,它存储RadarParm的每个部分

这是访问prm.lag时的当前输出:

<Swig Object of type 'int16 **' at 0x1fd55d0>
编译此文件时,我得到:

Error: Syntax error in input(1).

关于如何使这项工作有效,有什么想法吗?

在这个例子中,numpy。我没有工作。主要的问题是numpy。我不支持(out)类型映射,在这种情况下,这正是我所需要的

而是在编译swig rtserver.i文件时使用命令-debug tmsearch。使用命令的输出,我能够确定RadarParm::lag定义的swig类型以及它应该是什么。下面是有效的代码

%typemap(out) int16*[2] {
  int i;
  $result = PyList_New(2);
  for (i = 0; i < 2; i++) {
    PyObject *o = PyInt_FromLong($1[i]);
    PyList_SetItem($result,i,o);
  }
}
%apply int16*{lag[2]};
%typemap(out)int16*[2]{
int i;
$result=PyList_New(2);
对于(i=0;i<2;i++){
PyObject*o=PyInt_FromLong($1[i]);
PyList_SetItem($result,i,o);
}
}
%应用int16*{lag[2]};
其中大部分是从

%typemap(out) int16*[2] {
  int i;
  $result = PyList_New(2);
  for (i = 0; i < 2; i++) {
    PyObject *o = PyInt_FromLong($1[i]);
    PyList_SetItem($result,i,o);
  }
}
%apply int16*{lag[2]};