1
파이썬 C API를 사용하여 C에서 파이썬 함수를 호출하려고합니다. 나는 PyObject_Call
을 사용하여 파이썬 함수를 호출한다.이 함수는 PyObject를 리턴한다. 반환 된 PyObject가 numpy 배열 또는리스트 인 경우 어떻게 처리해야합니까? 기본적으로 C 배열로 캐스팅하거나 포인터를 꺼내려면 어떻게해야합니까?Python C API에서 반환 된 PyObject의 포인터를 얻는 방법은 무엇입니까?
다음은 코드의 개요입니다. func
은 numpy.power
입니다.
double Array[4] = {1.0, 2.0, 3.0, 4.0};
int Integer = 2;
double *call_func(PyObject *func, double array[], int integer){
PyObject *args;
PyObject *kwargs;
PyObject *result;
npy_intp dims[1] = {4};
double *retval;
PyGILState_STATE state = PyGILState_Ensure();
args = Py_BuildValue("(Od)", PyArray_SimpleNewFromData(1, dims, NPY_DOUBLE, Array), integer);
kwargs = NULL;
result = PyObject_Call(func, args, kwargs);
Py_DECREF(args);
Py_XDECREF(kwargs);
retval = ???
Py_DECREF(result);
PyGILState_Release(state);
return retval;
}
...
'PyArray_CheckExact' 및'PyArray_DATA'를 확인하십시오. http://docs.scipy.org/doc/numpy/reference/c-api.array.html#c.PyArray_CheckExact 및 http://docs.scipy.org/ doc/numpy/reference/c-api.array.html # c.PyArray_DATA –
@ Alok-- 그러나 'PyObject_Call'의 반환 유형은 PyArrayObject가 아닌 PyObject이므로 사용할 수 있을지 모르겠습니다. – chemicaholic
'PyObject *'에서 사용하도록되어 있습니다 : 정의에 대해서는 https://github.com/numpy/numpy/blob/master/numpy/core/include/numpy/ndarrayobject.h#L35를 참조하십시오. https://github.com/numpy/numpy/blob/master/numpy/core/src/multiarray/number.c#L89는'PyObject *'에 사용 된 예입니다. –