我正在尝试为我的python / numpy代码编写一个简单的c ++扩展。但是,我无法编译扩展脚本,因为函数输入中的PyArrayObject没有成员。在我看来,我做的就像this post一样,但我想我错过了一些东西。这是一个无法编译的示例,因为我尝试检索维度成员:
#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];
}
这是使用MVS 14.0 c ++编译器在linux系统和Windows 7计算机上编译的,因此问题似乎与平台无关。
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
答案 0 :(得分:1)
关注发布的示例后,我也遇到了这个问题。我相信不推荐使用维度成员。而应使用PyArray_DIM或PyArray_DIMS(参见NumPy docs)
例如:
long n=PyArray_DIM(array,1);