NumPy C-API: 将类型对象转换为数字类型

7
该函数
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获取类型编号,可以获得描述符结构体。如果你查看该链接,还有一些其他函数用于将各种东西转换为描述符结构体。它们可能更有用,而且它们还包含对其类型的引用。

那并没有回答我的问题。我只有一个类型对象可以使用。我正在编写一个Python扩展模块,其中一个函数具有Python接口,该接口接受标量类型的类型对象。 - Johan Råde
3
那么,您可能正在寻找PyArray_DescrConverter,它可以接受类型或类型名称(或其他您可以提供给numpy.dtype的内容),并获取描述符。从描述符中,您可以获取类型编号、类型种类、类型对象或任何其他您想要的信息。 - kwatford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接