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

Joh*_*åde 6 c python numpy python-c-api

功能

PyObject* PyArray_TypeObjectFromType(int);
Run Code Online (Sandbox Code Playgroud)

将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;
}
Run Code Online (Sandbox Code Playgroud)

kwa*_*ord 4

如果您可以获得PyArray_Descrstruct 而不是PyArray_TypeObjects,则只需查看type_num字段即可。可以使用PyArray_DescrFromType通过类型号获取 descr 结构。如果您查看该链接,还会发现更多用于将各种内容转换为 descr 结构的函数。一般来说,它们可能比类型对象更有用,并且它们也包含对其类型的引用。

  • 那么您可能正在寻找 [PyArray_DescrConverter](http://docs.scipy.org/doc/numpy/reference/c-api.array.html#PyArray_DescrConverter) ,它应该采用类型或类型名称(或其他你可以给`numpy.dtype`)并获取它的描述。从中您可以获取类型编号、类型类型、类型对象或您想要的任何其他内容。 (3认同)