Une fonction que je vous appelle à partir d'une bibliothèque partagée retourne une structure appelée information semblable à ceci:Lancer un tableau de struct C à un tableau numpy
typedef struct cmplx {
double real;
double imag;
} cmplx;
typedef struct info{
char *name;
int arr_len;
double *real_data
cmplx *cmplx_data;
} info;
L'un des champs de la structure est un tableau de double tandis que l'autre est un tableau de nombres complexes. Comment puis-je convertir le tableau de nombres complexes en un tableau numpy? Pour les doubles, j'ai ce qui suit:
from ctypes import *
import numpy as np
class cmplx(Structure):
_fields_ = [("real", c_double),
("imag", c_double)]
class info(Structure):
_fields_ = [("name", c_char_p),
("arr_len", c_int),
("real_data", POINTER(c_double)),
("cmplx_data", POINTER(cmplx))]
c_func.restype = info
ret_val = c_func()
data = np.ctypeslib.as_array(ret_val.contents.real_data, shape=(info.contents.arr_len,))
Existe-t-il une doublure pour les nombres complexes? Je peux le faire en utilisant des boucles.
La bibliothèque partagée exige que le champ soit un pointeur vers la structure CMPLX. –
Ok, ça a marché. Pourriez-vous s'il vous plaît expliquer pourquoi? C exige que ce soit un pointeur vers la structure cmplx mais nous utilisons un pointeur vers un objet c_double dans python. –
un nombre complexe n'est rien d'autre que deux doubles. Pour l'interface, le type n'est pas important (vous pouvez même utiliser des octets). À la fin, la vue de votre tableau numérique définit le type. – Daniel