我有一个C函数返回2d数组(实际上是double **),我想使用ctypes将此double **传递给python.对此有疑问,但是在参数列表中而不是使用函数的返回值来修改数组.这是我的代码(C函数和相应的python包装器)
double** flux_function_2d(double *u,double gamma){
double **F;
double p,H;
F = (double **)malloc(4*sizeof(double *));
for (int i &#61; 0; i <4; i&#43;&#43;)
F[i] &#61; (double *)malloc(2*sizeof(double));
p &#61; (gamma - 1.0) * (u[3] - 0.5 * (u[1]*u[1] &#43; u[2]*u[2]) / u[0]);
H &#61; u[3] / u[0] &#43; p / u[0];
F[0][0] &#61; u[1]; F[1][0] &#61; u[1] * u[1] / u[0] &#43; p;
F[2][0] &#61; u[1] * u[2] / u[0]; F[3][0] &#61; u[1] * H;
F[0][1] &#61; u[2]; F[1][1] &#61; u[2] * u[1] / u[0];
F[2][1] &#61; u[2] * u[2] / u[0] &#43; p; F[3][1] &#61; u[2] * H;
return F;
}
def c_flux_function_2d(u,gamma):
flux &#61; np.ctypeslib.load_library("libs/flux.so",".")
flux.flux_function_2d.argtypes &#61; [POINTER(c_double),c_double]
flux.flux_function_2d.restype &#61; POINTER(POINTER(c_double))
F &#61; flux.flux_function_2d(u.ctypes.data_as(POINTER(c_double)),c_double(gamma))
F_arr &#61; np.ctypeslib.as_array(F,shape&#61;(4,2))
return F_arr
该错误发生在F_arr &#61; np.ctypeslib.as_array(F,shape &#61;(4,2))处,这意味着numpy无法解析ctypes中的指针的指针.
提前致谢&#xff01;