C返回具有错误值的numpy数组

时间:2019-02-21 00:05:49

标签: python c numpy

下面的扩展只是一个小测试,它使用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相匹配?

1 个答案:

答案 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;