use*_*370 9 c python arrays swig return
我知道,通常有很多方法可以解决某些问题.但是在这里我知道我希望它采用哪种方式,但我无法使用Python和SWIG ...
我有一个C函数,它返回一个double值数组:
double *my(int x)
{
double a,b,*buf;
buf = malloc (x * sizeof(double));
a=3.14;
b=2.7;
buf[0]=a;
buf[1]=b;
return buf;
}
Run Code Online (Sandbox Code Playgroud)
在这里,我明确希望将数组作为返回值.不像在许多示例中那样写入输入数组的'void'函数.现在,我想获得一个SWIG-python包装器,它可以用作:
>>> import example
>>> print example.my(7)
[3.14,2.7]
Run Code Online (Sandbox Code Playgroud)
无论我做什么,我都有一些概念上的问题 - 我总是得到s.th. 喜欢<Swig Object of type 'double *' at 0xFABCABA12>
我试图在swg文件中定义一些类型图:
%typemap(out) double [ANY] {
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);
}
}
Run Code Online (Sandbox Code Playgroud)
但我仍然无法按要求取出我的结果.有没有人有一个简单的代码示例来实现这个任务?
Tar*_*ast -4
我不知道你懂多少 C - 所以很抱歉如果我在这里教你吸鸡蛋......
普通 C 语言中没有 Array 类。数组始终是指向一块内存的指针,而不是其本身的“事物”,因此不能仅自行打印出来。
在这种情况下 - 你的“buf”是“double *”类型。AFAICRem,如果你想打印出存储在“buf指向的内存”中的实际值,你必须释放每个值,例如(伪代码): for i = 0 to buflength print buf[i]