Модуль расширения C ++ для Python, возвращающий массив Numpy - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь создать модуль расширения для Python на C ++, используя SWIG, который может возвращать массив Numpy в Python.Этот пустой массив является многомерным, и каждая ячейка может иметь значение или список значений (int 64, [int32, int32] и т. Д.). Я могу вернуть нормальный массив в Python из C ++. Может кто-нибудь подсказать мне, как продолжитьэто? Я сталкиваюсь с numpy.i, arrayinterface , набором карт, и я не совсем уверен, с чего начать. Может ли кто-нибудь, пожалуйста, направить меня в этом отношении? Спасибо.

1 Ответ

0 голосов
/ 26 октября 2018

Я думаю, что Numpy C API - это хороший подход. Вы все еще можете использовать SWIG. Но я бы настоятельно рекомендовал не использовать типографские карты SWIG, они очень сложные. Вместо этого вы можете принимать и возвращать массивы Numpy в виде указателя PyObject * в вашей подписи SWIG и создавать / извлекать их, используя C API. SWIG обернет это правильно.

Если это ваше первое расширение Python, обязательно прочитайте введение Python C API . По крайней мере, вам нужно знать контракт API для подсчета ссылок.

Другой вариант - реализовать буферный протокол API , который понимает numpy.

Еще один вариант - Boost.Python , если вам не нравится код C в мире C ++. У меня нет опыта с этим. Лично мне нравится Python C API из-за его низкой сложности.

...