c - 如何在 Python C API 中获取返回的 PyObject 的指针?

标签 c numpy python-c-api

我正在尝试使用 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;
} 

...

最佳答案

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

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

它将帮助您操作 numpy 数组。

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

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

关于c - 如何在 Python C API 中获取返回的 PyObject 的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38059466/

相关文章:

c - 外部没有区别

python - 内存 NumPy 向量化函数

python - 如何在Python中绘制一个文件夹中的所有文件?

python - 在 C/API 中指定 Python 函数签名

c - 面向 C 程序员的 Intel Core

c - 以定时阻塞模式读取

c - 将字符串读取为虚拟文件

python - 将多个 numpy 文件附加到 python 中的一个大 numpy 文件

c++ - 在用户类中包含 pybind11 嵌入式模块的正确方法是什么(作为单例类的一部分)

python - pybind11 中是否可以使用 py::cast 访问抽象基类?