NumPy C-API: преобразование объекта типа в число типа

Функция

PyObject* PyArray_TypeObjectFromType(int);

преобразует номер типа для скалярного типа NumPy (NPY_BOOL, NPY_BYTE, ...) в соответствующий объект типа.

Как сделать противоположное преобразование из объекта типа для скалярного типа NumPy в соответствующий номер типа?

Изменить: Следующий код основан на ответе Кватфорда. Он принимает как объекты типа, такие как 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;
}
6
задан Johan Råde 13 December 2011 в 18:15
поделиться