NumPy C-API: convert type object to type number

2019-04-29 07:44发布

The function

PyObject* PyArray_TypeObjectFromType(int);

converts the type number for a NumPy scalar type (NPY_BOOL, NPY_BYTE, ...) to the corresponding type object.

How do you do the opposite conversion, from the type object for a NumPy scalar type to the corresponding type number?

Edit: The following code is based on kwatford's answer. It accepts both type objects such as int and numpy.int16, and strings such as "int", u"int" and "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条回答
唯我独甜
2楼-- · 2019-04-29 08:15

If you can get PyArray_Descr structs rather than PyArray_TypeObjects, you can simply look at the type_num field. The descr structs can be acquired via the type number using PyArray_DescrFromType. If you look at that link, there are also a few more functions for converting various things into descr structs. They're probably more useful in general than the type objects, and they contain references to their types as well.

查看更多
登录 后发表回答