C中的numpy数组类型转换
Posted
技术标签:
【中文标题】C中的numpy数组类型转换【英文标题】:numpy arrays type conversion in C 【发布时间】:2010-07-09 14:38:08 【问题描述】:我想在 C(Swig) 中将 numpy double 数组转换为 numpy float 数组。 我正在尝试使用
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?我错过了什么吗?
【问题讨论】:
还没有答案吗?谁能告诉我如何使用 API 转换类型? 【参考方案1】:您的方法是正确的,但您对它们 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 调用以及不同标志和值的含义。
【讨论】:
以上是关于C中的numpy数组类型转换的主要内容,如果未能解决你的问题,请参考以下文章
为啥numpy数组的astype方法在转换类型时不修改输入?
无法将 NumPy 数组转换为张量(不支持的对象类型 numpy.ndarray)错误
通过重新解释原始字节从一种类型的 numpy 数组转换为另一种类型