下面的扩展只是一个小测试,它使用PyArray_SimpleNewFromData()函数将整数数组从C输出为numpy数组。
#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
#include <Python.h>
#include <numpy/arrayobject.h>
#include <stdio.h>
#include "test_func.h"
static PyObject *sum_c(PyObject *self, PyObject *args)
{
PyObject *result;
int a, b;
int ans[1]={1};
npy_intp dims[1] = {1};
//Parse arguments
if (!PyArg_ParseTuple(args, "ii", &a, &b)){
return NULL;
}
result = PyArray_SimpleNewFromData(1, &dims[0], NPY_INT, ans);
return result;
}
static PyMethodDef module_methods[] = {
{"sum_c", sum_c, METH_VARARGS, "Sum two unsigned integers and returns the answer in numpy dtype"},
{NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC init_test_func(void){
(void) Py_InitModule("_test_func", module_methods);
import_array();
}
编译并导入python之后,结果是一个1x1 numpy数组,其值不为1(在代码中为测试值)。
我最好的猜测是C dtype的解释,尽管NPY_INT应该与C中的INT dtype相匹配?
答案 0 :(得分:0)
发现错误,我需要malloc()返回变量,例如:
PyObject *result;
int a, b;
//int ans[1]={1};
int *ans;
npy_intp dims[1] = {1};
ans = (int *)malloc(1*sizeof(int));
ans[0] = 4;