gpt4 book ai didi

python /痛饮 : Output an array

转载 作者:太空狗 更新时间:2023-10-29 22:16:32 35 4
gpt4 key购买 nike

我正在尝试从使用 SWIG for Python 包装的 C 函数中输出一组值。我尝试做的方式是使用以下类型映射。

伪代码:

int oldmain() {
float *output = {0,1};
return output;
}

类型图:

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

我的代码编译得很好,但是当我运行访问这个函数时它挂起(没有更多的调试方法)。

对我哪里出错有什么建议吗?

谢谢。

最佳答案

允许长度变化的最简单方法是添加另一个输出参数来告诉您数组的大小:

%module test

%include <stdint.i>

%typemap(in,numinputs=0,noblock=1) size_t *len {
size_t templen;
$1 = &templen;
}

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

%inline %{
float *oldmain(size_t *len) {
static float output[] = {0.f, 1.f, 2, 3, 4};
*len = sizeof output/sizeof *output;
return output;
}
%}

这是从 this answer 修改而来的添加 size_t *len 可用于在运行时返回数组的长度。 typemap 完全隐藏了 Python 包装器的输出,而是在 %typemap(out) 中使用它而不是固定大小来控制返回列表的长度。

关于 python /痛饮 : Output an array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11679023/

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