我正在CentOS 7上使用Anaconda Spyder 3.3.6(Python 3.7)。我想将numpy数组传递给一个C函数,该函数处理输入并返回一个numpy数组作为输出。我从一个简单的实现开始,如下所示
#include <stdio.h>
#include <stdlib.h>
#include "/home/peter/anaconda3/include/python3.7m/Python.h"
#include "numpy/arrayobject.h"
#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
int CsqueezeSurfaces(PyArrayObject *surfaceVectors, PyArrayObject *dimensions)
{
printf("This function squeezes the surfaces");
return 1;
}
static PyObject* squeezeSurfaces(PyObject* self, PyObject* args)
{
PyArrayObject *surfaceVectors=NULL, *dimensions=NULL;
if (!PyArg_ParseTuple(args, "i", surfaceVectors, dimensions)){
PyErr_Print();
printf("PyArg_ParseTuple error");
return NULL;
}
return Py_BuildValue("i", CsqueezeSurfaces(surfaceVectors, dimensions));
}
static PyMethodDef surfaceMethods[] = {
{"squeezeSurfaces", squeezeSurfaces, METH_VARARGS, "Squeezes surfaces along normal vectors"},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef surfaceModules = {
PyModuleDef_HEAD_INIT,
"surfaceModules",
"Surface function Module",
-1,
surfaceMethods
};
PyMODINIT_FUNC PyInit_surfaceModules(void){
import_array();
return PyModule_Create(&surfaceModules);
}
Spyder会话运行如下
In [1]: import surfaceModules as sm
In [2]: sm.squeezeSurfaces(1)
In [1]: sm.squeezeSurfaces(1)
Traceback (most recent call last):
File "<ipython-input-1-a00ba41618ea>", line 1, in <module>
sm.squeezeSurfaces(1)
NameError: name 'sm' is not defined
In [2]:
目前没有回答
相关问题 更多 >
编程相关推荐