C возвращает массив с неправильными значениями - PullRequest
0 голосов
/ 21 февраля 2019

Расширение, приведенное ниже, представляет собой небольшой тест для вывода массива целых чисел из C в python в виде массивов с использованием функции PyArray_SimpleNewFromData ().

#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, результатом будет массив nuxy размером 1x1, не имеющий значения 1 (которое в коде является тестовым значением).

Мое лучшее предположение - этоинтерпретация типа C d, хотя NPY_INT должен соответствовать типу INT d в C?

1 Ответ

0 голосов
/ 21 февраля 2019

Нашли ошибку, мне нужно 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; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...