0
функции Я звоню из разделяемой библиотеки возвращает структуру, называемой информацию, подобную этой:Кастинг массива структур C в Numpy массива
typedef struct cmplx {
double real;
double imag;
} cmplx;
typedef struct info{
char *name;
int arr_len;
double *real_data
cmplx *cmplx_data;
} info;
Одно из полой структуры является массивом удваивается, а другой - массив комплексных чисел. Как преобразовать массив комплексных чисел в массив numpy? Для двойников у меня есть следующее:
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,))
Есть ли один номер один для сложных номеров? Я могу сделать это с помощью петель.
разделяемые библиотеки требуют, чтобы поле было указателем на CMPLX структуру. –
Хорошо, это действительно работаю. Не могли бы вы объяснить, почему? C требует, чтобы он был указателем на структуру cmplx, но мы используем указатель на объект c_double в python. –
комплексное число - это не что иное, как два двухместных. Для интерфейса тип не важен (вы даже можете использовать байты). В конце, вид вашего numpy-массива определяет тип. – Daniel