J'ai une fonction C qui retourne un tableau 2d (en fait un double**), je veux passer ce double** à python en utilisant ctypes. Il y a des questions à ce sujet mais le tableau est modifié dans la liste des paramètres plutôt que d'utiliser le retour de la fonction. Voici mon code (La fonction C et le wrapper python correspondant)
double** flux_function_2d(double *u, double gamma){
double **F;
double p, H;
F = (double **)malloc(4*sizeof(double *));
for (int i = 0; i < 4; i++)
F[i] = (double *)malloc(2*sizeof(double));
p = (gamma - 1.0) * (u[3] - 0.5 * (u[1]*u[1] + u[2]*u[2]) / u[0]);
H = u[3] / u[0] + p / u[0];
F[0][0] = u[1]; F[1][0] = u[1] * u[1] / u[0] + p;
F[2][0] = u[1] * u[2] / u[0]; F[3][0] = u[1] * H;
F[0][1] = u[2]; F[1][1] = u[2] * u[1] / u[0];
F[2][1] = u[2] * u[2] / u[0] + p; F[3][1] = u[2] * H;
return F;
}
def c_flux_function_2d(u, gamma):
flux = np.ctypeslib.load_library("libs/flux.so", ".")
flux.flux_function_2d.argtypes = [POINTER(c_double), c_double]
flux.flux_function_2d.restype = POINTER(POINTER(c_double))
F = flux.flux_function_2d(u.ctypes.data_as(POINTER(c_double)),
c_double(gamma))
F_arr = np.ctypeslib.as_array(F, shape=(4, 2))
return F_arr
L'erreur se produit à F_arr = np.ctypeslib.as_array(F, shape=(4, 2)) ce qui signifie que numpy ne peut pas analyser le pointeur d'un pointeur dans ctypes.
Merci d'avance !