C语言中numpy数组类型转换
我想把numpy的双精度数组转换成numpy的浮点数组,使用的是C语言(通过Swig)。
我尝试了
PyObject *object = PyArray_FROM_OT(input,NPY_FLOAT)
或者
PyObject *object = PyArray_FROMANY(input,NPY_FLOAT,0,0,NPY_DEFAULT)
或者
PyObject *object = PyArray_FromObject(input,NPY_FLOAT,0,0)
或者
PyObject *object = PyArray_ContiguousFromAny(input,NPY_FLOAT,0,0)
但是它们都返回了NULL?我是不是漏掉了什么?
1 个回答
5
你的方法是对的,但你对numpy C API的理解有点偏差。NPY_FLOAT只是一个整数常量,而你提到的那些函数需要的类型参数是一个指向PyArray_Descr结构体的指针。
如果你想从一个简单的类型获取类型描述,可以使用PyArray_DescrFromType这个函数,所以你的调用可以像这样:
PyArrayObject* float_array = (PyArrayObject*)PyArray_FromAny(input,PyArray_DescrFromType(NPY_FLOAT64), 0,0, flags);
...在这里,flags可以是你认为在转换时有意义的任何标志 - 请查看numpy的API文档,以了解如何正确调用API以及不同标志和数值的含义。