Создайте 2D массив c_types в Python и используйте его в функции C - PullRequest
2 голосов
/ 28 октября 2019

Я искал в Google и не могу найти решение. Я просто хочу создать массив 2D-указателей, который будет ссылаться на существующий массив Python, чтобы отправить его в функцию C благодаря c_types.

tab - это существующий одномерный массив, и он работал:

arr = (c_int * 1000000)(*tab)
Basic.Basic_c.quicksort.restype = POINTER(c_int )
c = Basic.Basic_c.quicksort(arr)

С 2D-массивом:

Matrix = [[0 for x in range(8)] for y in range(5)];
arr = ((c_int * 8)*5)(*Matrix)

Это не сработало, создайте ошибку:

TypeError: expected c_long_Array_8 instance, got list

Я не могу найти решение.

1 Ответ

2 голосов
/ 28 октября 2019

Вместо использования двухмерного списка вы можете использовать кортеж кортежей. Итак, после того, как вы создали свою матрицу, преобразуйте ее в кортеж, как показано ниже.

Matrix = [[0 for x in range(8)] for y in range(5)];
Matrix = tuple(map(tuple, Matrix))
arr = ((c_int * 8)*5)(*Matrix)
...