C 中的 numpy 数组类型转换

lak*_*sha 3 python swig numpy

我想将 C(Swig) 中的 numpy double 数组转换为 numpy float 数组。我正在尝试使用

PyObject *object = PyArray_FROM_OT(input,NPY_FLOAT)
Run Code Online (Sandbox Code Playgroud)

或者

PyObject *object = PyArray_FROMANY(input,NPY_FLOAT,0,0,NPY_DEFAULT)
Run Code Online (Sandbox Code Playgroud)

或者

PyObject *object = PyArray_FromObject(input,NPY_FLOAT,0,0)
Run Code Online (Sandbox Code Playgroud)

或者

PyObject *object = PyArray_ContiguousFromAny(input,NPY_FLOAT,0,0)
Run Code Online (Sandbox Code Playgroud)

但它们都返回NULL?我错过了什么吗?

Jim*_*som 5

您的方法是正确的,但您对 numpy C API 的假设则不然。NPY_FLOAT 只是一个整数常量,但您发布的函数要求类型参数是指向PyArray_Descr struct的指针。

为了从单纯的类型中获取类型描述,您可以调用 PyArray_DecrFromType,因此您的调用可能如下所示:

PyArrayObject* float_array = (PyArrayObject*)PyArray_FromAny(input,PyArray_DescrFromType(NPY_FLOAT64), 0,0, flags);
Run Code Online (Sandbox Code Playgroud)

...标志是您在转换时认为有意义的任何标志 - 请查看 numpy API,以了解正确的 API 调用以及不同标志和值的含义。