Предаване на масив Numpy към C 2D масив във формат на указател към указател с помощта на Cython

Имам C код, който в момента включвам в Python с помощта на Cython. Кодът C се занимава с 2D масиви във формат указател към указател, т.е. разпределянето на памет за масив 3x3 се извършва по следния начин

float **A = (float **)malloc(3*sizeof(float *));
for (i=0; i<3; i++) A[i] = (float *)malloc(3*sizeof(float));

Следвам този урок от уикито на Cython Github. Имайте предвид, че те съхраняват 2D масива линейно.

Моят въпрос тогава е какъв е най-ефективният начин за промяна на кода на Cython (по-специално обработката на масива Numpy), така че да работи за функция void c_multiply (float** array, float multiplier, int m, int n) да речем (т.е. сега се занимава с масиви от указател към указател).

Забележете, че в момента се справям с това, като имам две функции за конвертиране в C кода, който се извиква първоначално и в края, за да промени индексирането от линейно към указател към указател и обратно. В идеалния случай обаче не искам да променям C кода.


person rwolst    schedule 28.01.2015    source източник