Я пытаюсь написать простое расширение C ++ для моего кода Python / Numpy. Однако я не могу скомпилировать скрипт расширения, потому что PyArrayObject из входных данных функции не имеет членов. Мне кажется, что я делаю так же, как, например, эта почта, но я полагаю, что что-то пропустил. Вот пример, который не удается скомпилировать, потому что я пытаюсь получить член измерений:
#include <Python.h>
#include <stdio.h>
#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
#include "numpy/arrayobject.h"
static PyObject *function(PyObject *self, PyObject *args) {
PyObject *input;
PyArrayObject *array;
if (!PyArg_ParseTuple(args, "O", &input))
return NULL;
array= (PyArrayObject *)
PyArray_ContiguousFromObject(input, NPY_DOUBLE, 2, 2);
long n=array->dimensions[1];
}
Это скомпилировано в системе linux и на компьютере под управлением Windows 7 с использованием компилятора MVS 14.0 c ++, поэтому проблема, по-видимому, не зависит от платформы.
Версия Python: 3.5
Исключение вывода из системы Windows:
paneltime/cfunctions.cpp(20): error C2039: 'dimensions': is not a member of 'tagPyArrayObject'c:\anaconda3\lib\site-packages\numpy\core\include\numpy\ndarraytypes.h(692): note: see declaration of 'tagPyArrayObject'
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\cl.exe' failed with exit status 2
У меня также была эта проблема, когда следующие опубликованные примеры. Я считаю, что использование члена измерений не рекомендуется. Вместо этого следует использовать PyArray_DIM или PyArray_DIMS (см. NumPy документы)
Например:
long n=PyArray_DIM(array,1);
Других решений пока нет …