NumPy 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 个回答
4
如果你能得到 PyArray_Descr
结构体,而不是 PyArray_TypeObject
,那么你只需要查看 type_num 这个字段就可以了。你可以通过类型编号使用 PyArray_DescrFromType 来获取这些 descr 结构体。如果你查看那个链接,还会发现一些其他的函数,可以把各种东西转换成 descr 结构体。一般来说,这些函数可能比类型对象更有用,而且它们也包含对其类型的引用。