Моя цель - создать массив в 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;
}