массив numpy 2d int для массива C указателей int с использованием ctypes - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть функция в C, которая принимает целочисленную матрицу nxm как массив из n указателей int.Каждый указатель указывает на первый элемент целочисленного массива размером m, поэтому эти массивы можно рассматривать как строки матрицы.Так, например:

void func(int **matrix, int n, int m);

И в памяти массив выглядит как массив 1 со этой страницы: http://c -faq.com / aryptr / dynmuldimary.html

Я хочу использовать эту функцию C из Python, используя ctypes.Поэтому я импортировал его и дал ему следующие аргументы argtypes:

func.argtypes = [ctypes.POINTER(ctypes.POINTER(ctypes.c_int)), ctypes.c_int, ctypes.c_int]

Теперь я хочу дать функции массив numpy 2d ...

Допустим, у меня есть массив 2d numpy int:

 a = np.random.rand(2,3) * 100
 a = a.astype("int")

Как преобразовать цифровую матрицу a в нужный формат и наоборот?

Я пытался использовать:

a.ctypes.data_as(ctypes.POINTER(ctypes.POINTER(ctypes.c_int)))

Но это дает мне seggault ...

...