gpt4 book ai didi

python - 使用 numpy.i 和 swig 访问 int16 数组

转载 作者:行者123 更新时间:2023-11-30 17:14:43 24 4
gpt4 key购买 nike

以下 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_data 是一个 Python 字典,用于存储 RadarParm 的每个部分。

这是我访问 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 不支持 (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]};

大部分内容取自this answer

关于python - 使用 numpy.i 和 swig 访问 int16 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30202157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com