NumPy C-API:将类型对象转换为类型编号

时间:2011-12-12 16:02:43

标签: python c numpy python-c-api

功能

PyObject* PyArray_TypeObjectFromType(int);

将NumPy标量类型(NPY_BOOL,NPY_BYTE,...)的类型编号转换为相应的类型对​​象。

如何进行相反的转换,从NumPy标量类型的类型对象到相应的类型号?

编辑:以下代码基于kwatford的回答。它接受类型对象,如int和numpy.int16,以及字符串,如“int”,u“int”和“int16”。

int numpyScalarTypeNumber(PyObject* obj)
{
    PyArray_Descr* dtype;
    if(!PyArray_DescrConverter(obj, &dtype)) return NPY_NOTYPE;
    int typeNum = dtype->type_num;
    Py_DECREF(dtype);
    return typeNum;
}

1 个答案:

答案 0 :(得分:4)

如果您可以获得PyArray_Descr结构而不是PyArray_TypeObject,则只需查看type_num字段即可。可以使用PyArray_DescrFromType通过类型编号获取描述结构。如果你看一下这个链接,还有一些函数可以将各种东西转换成描述。它们通常比类型对象更有用,它们也包含对其类型的引用。