Python 使用numpy.i和swig访问int16阵列
以下来自c结构的内容已经用swig包装,这样我就可以用python访问从另一个swig包装的程序中获取的数据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
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]};