在python(3.5)中,我有N个数组的列表,每个数组的大小不同。对于N = 2,例如:
v = [ np.array((0., 2., 4.)), np.array((0., 3.)) ]
N本身不是固定的。 从C我想访问列表的第i个元素的第n个元素。 v [0] [1] = 2。 作为从python到C的接口,我正在使用SWIG。
在C语言中,我的结构类似于:
struct timestamps
{
int N;
double **a;
int *lengths;
};
其中N是列表中元素的数量。 我希望将其作为N个位置的数组,每个位置包含指向原始列表的第n个数组的指针。长度为N的数组,每个数组包含原始列表的第n个数组的长度。
例如在C语言中,我有一个函数可以简单地打印要访问的元素的值:
void print (int N, double **a, int *lenghts) {
int i, j;
struct timestamps T;
T.N = N;
T.a = a;
T.lenghts = lenghts;
for ( i = 0; i < T.N; i++ ) {
for (j = 0, j < T.lenghts[i]; j++ ) {
printf("%lf\t", *(T.a[i] + j));
}
printf("\n");
}
}
我想从python脚本调用print并获取输出:
0. 2. 4.
0. 3.
我的问题是本机对象是在python中创建的numpy数组的列表。 最好的方法是什么? (我做了几次尝试,但它们都是基于c的,从某种意义上说,我试图在python中创建一个指针数组,就像我在C中所做的一样,但没有成功)
非常感谢您,我真的找不到任何“易于理解的C人物”参考资料...
答案 0 :(得分:0)
为此,您需要一个接口帮助器功能。参见reference
// Some array helpers
%inline %{
/* Create any sort of [size] array */
int *int_array(int size) {
return (int *) malloc(size*sizeof(int));
}
/* Create a two-dimension array [size][10] */
int (*int_array_10(int size))[10] {
return (int (*)[10]) malloc(size*10*sizeof(int));
}
%}
此外,您的a
必须是一个锯齿状的数组,如下所示:
double *a[100];
a[0] = malloc(sizeof(double) * N1);
a[1] = malloc(sizeof(double) * N2);