Измените данные массива с C на Python - PullRequest
1 голос
/ 16 апреля 2020

Моя цель - создать массив в C, передать его функции Cython / Python, которая изменяет данные и возвращает их в C и считывает данные из C. Моя программа работает нормально, если я не ничего не делаю с массивом в python и просто возвращаю его. Однако, когда я делаю что-то внутри этой функции, моя программа прерывается после печати «После функции:».

Мой текущий код выглядит так:

test.pyx

cimport cython
import numpy as np
cimport numpy as np

cdef public c_array_to_numpy(input):
    cdef int[:,::1] temp = input
    temp[2,0] = 13
    return input

основной. c

#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include <ndarrayobject.h>
#include <stdio.h>
#include <Windows.h>
#include "test.h"

int main()
{
    Py_Initialize();
    import_array();

    int array1[2][3] = {{3, 7, 4}, {8, 5, 9}};

    int nd = 2;

    npy_intp const dims[2] = {2, 3};

    PyObject* new_array3 = PyArray_SimpleNewFromData(nd, dims, NPY_INT32,(void*) array1);

    Py_INCREF(new_array3);
    Py_INCREF(new_array3);

    printf("Before the function:\n");
    for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            printf("%i ", array1[i][j]);
        }
        printf("\n");
    }

    printf("After the function:\n");
    PyObject* changed = c_array_to_numpy(new_array3);
    int* data_changed = PyArray_DATA(changed);
    printf("%i", changed[2]);


    Sleep(3000);
    Py_Finalize();

    return 0;
}
...