Вызов функции Python из C с Cython: проблемы с типами данных NumPy - PullRequest
1 голос
/ 14 апреля 2020

Итак, я пытаюсь сделать следующее:

  1. Вызов функции в C с массивом или NumPy Массив в качестве аргумента
  2. Сделайте что-нибудь к содержимому массива в Cython / Python, как поэлементное умножение на 2
  3. Вернуть соответствующий тип данных обратно в C

Моя единственная проблема заключается в том, что я надеваю Не знаю, как создать NumPy Array в C или вернуть массив в моей функции cdef. Я, конечно, пробовал гуглить и читать по всему inte rnet, но я просто не нашел ничего действительно полезного (или не понял, что было предложено). Я попробовал просмотр памяти, но у меня тоже не получилось:

cdef public int[:,:] c_array_to_numpy(int[:,:] input):
    cdef int [:,:] memview = input
    cdef int[2][3] output
    for x in range(memview.shape[0]):
        for y in range(memview.shape[1]):
            memview[x, y] *= 5
            output[x][y] = memview[x][y]
    return output

и в C это должно выглядеть примерно так

int test[2][3] = {{3, 7, 4}, {8, 5, 9}};
c_array_to_numpy(test);
for (int i = 0; i < 2; i++)
{
    for (int j = 0; j < 3; j++)
    {
        printf("%i ", test[i][j]);
    }
    printf("\n");
}

1 Ответ

1 голос
/ 16 апреля 2020

Numpy внутренне использует C массивы, поэтому вам не нужно выполнять преобразование.

Я бы рекомендовал сначала использовать scipy.weave (что позволяет встроить C -код в python), и после того, как у вас это получится, рассмотрите возможность размещения C -кода вне вашего python источника с использованием соответствующей библиотеки.

...