【问题标题】:How to get the pointer of a returned PyObject in Python C API?如何在 Python C API 中获取返回的 PyObject 的指针?
【发布时间】:2016-06-27 17:03:29
【问题描述】:

我正在尝试使用 Python C API 在 C 中调用 Python 函数。我使用PyObject_Call 调用返回PyObject 的Python 函数。如果返回的 PyObject 是一个 numpy 数组或列表,那么我应该如何处理它?基本上如果我想把它转换成一个C数组,或者只是把指针取出来,我该怎么做呢?

这里是代码的概要。 funcnumpy.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;
} 

...

【问题讨论】:

标签: c numpy python-c-api


【解决方案1】:

如果对象是 Numpy 数组,那么我认为this 会帮助你。但是你应该注意这个功能:

void* PyArray_GetPtr(PyArrayObject* aobj, npy_intp* ind)

它将帮助您操作 numpy 数组。

如果它是一个列表,那么您将需要来自this link 的函数来操作您的对象。

您将设法获取指向该项目的指针并将其转换回 C 对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-12
    • 2021-05-20
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多