#python #numpy #python-c-api
#python #numpy #python-c-api
Вопрос:
Я новичок в Python C-API.
В настоящее время я получаю объекты из встроенного модуля Python через
PyObject* a = (PyObject*) PyObject_GetAttrString(pModule, "a");
std::cout << "a as long is " << PyLong_AsLong(a) << std::endl;
Я получаю доступ к объектам numpy через
PyArrayObject* array = (PyArrayObject*) PyObject_GetAttrString(pModule, "A");
Как я могу проверить, действительно ли объект является a PyArrayObject
? Другими словами, как сделать то, что я бы сделал в Python через isinstance(a, numpy.ndarray)
?
Ответ №1:
Используйте PyArray_Check
или PyArray_CheckExact
. Используйте PyArray_Check
, если подклассы в порядке, или PyArray_CheckExact
если вам нужен объект с точным типом numpy.ndarray
.
Комментарии:
1. Это не работает для меня ?! Но я должен отметить, что я также не могу выделить массив numpy со стороны C (тот же код на macOS с clang и Linux с gcc 10).
std::cout << "check a: " << PyArray_Check(a) << std::endl;
результатыisinstance : unknown location:0: fatal error: in embedded_python: memory access violation at address: 0x00000010: no mapping at fault address
2. Я допустил ошибку, вставив свою ошибку: это
check a: unknown location:0: fatal error: in "embedded_python": memory access violation at address: 0x00000010: no mapping at fault address
— оба решения не работают для меня ?!3. Это звучит как новый вопрос. Вместо того, чтобы пытаться выяснить это здесь, в комментариях, создайте новый вопрос об ошибке.