[英]Accessing a int16 array using numpy.i and 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;
int16 *lag[2];
char *combf;
};
我的主要问题是与int16 * lag [2]。 当尝试使用以下命令读取我的python代码中的数据时:
p_data['lag'] = prm.lag
通过struct RadarParm * getRadarParm()方法从rtserver.c文件返回的prm是RadarParm类型的,而p_data是存储RadarParm各个部分的python字典。
这是我访问prm.lag时的当前输出:
<Swig Object of type 'int16 **' at 0x1fd55d0>
我发现似乎有一个numpy.i文件可以处理数组和int16数据类型。 根据我有限的理解,我认为这将允许我访问这些数据。 如果我可以正确实现它。
这是我到目前为止的内容:
%init %{
import_array();
%}
%apply (int16** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1) {(int16* lag,2)};
编译时,我得到:
Error: Syntax error in input(1).
关于如何进行这项工作的任何想法?
在这种情况下,numpy.i无法正常工作。 主要问题是numpy.i不支持(输出)类型映射,在这种情况下正是我需要的。
编译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]};
大部分是从这个答案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.