C语言中numpy数组类型转换

3 投票
1 回答
2128 浏览
提问于 2025-04-16 01:03

我想把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以及不同标志和数值的含义。

撰写回答