Как работает import_array в numpy C API? - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь преобразовать массив c-style в c ++ в пустой массив и столкнулся с проблемами при попытке использовать функцию «PyArray_SimpleNewFromData».Оказывается, мне нужно вызвать

import_array()

Хотя я не понимаю, как вызвать эту функцию.Всякий раз, когда я пытаюсь вызвать его, я получаю ошибку компилятора, которую мне не удается понять.Например, при написании следующего простого скрипта:

#include <Python.h>
#include <numpy/arrayobject.h>

int main(){
    Py_Initialize();
    import_array();
    Py_Finalize();
    return 0;
}

выдает ошибку компилятора

ошибка: оператор возврата без значения в функции, возвращающей 'int' [-fpermissive] import_array();

Я рассмотрел несколько примеров, таких как:

Пример Numpy C-Api дает SegFault

Пример PyArray_SimpleNewFromData

https://codereview.stackexchange.com/questions/92266/sending-a-c-array-to-python-numpy-and-back

Ошибка Numpy / CAPI с import_array () при компиляции нескольких модулей

Но все, что я пытаюсь (дажеказалось бы, следуя этим примерам) Кажется, я столкнулся с ошибкой компилятора выше.Что я пропускаю или делаю неправильно?Объяснение того, как должна вызываться функция import_array (), было бы очень кстати.Спасибо за помощь!

Обновление:

Я использую Python 2.7.11, и я думаю, что это может быть связано с тем, что обсуждается здесь:

https://github.com/clemenscorny/brisk/issues/3

но я до сих пор не знаю, как это исправить.

1 Ответ

0 голосов
/ 19 апреля 2019

Считывая исходный код import_array() из numpy, это макрос, который в основном вызывает обычную функцию _import_array(), а затем выполняет некоторую странную обработку исключений.Если вы наберете _import_array() вместо import_array(), ошибка компиляции исчезнет.И, по крайней мере, в моем случае, поведение при этом будет правильным (т. Е. Нет ошибки по умолчанию при вызове функций API Numpy C)

...