La funciónNumPy C-API: convertir el tipo de objeto a tipo de número
PyObject* PyArray_TypeObjectFromType(int);
convierte el número de tipo para un NumPy tipo escalar (NPY_BOOL, NPY_BYTE, ...) para el objeto de texto correspondiente.
¿Cómo se hace la conversión opuesta, del tipo objeto para un tipo escalar NumPy al número de tipo correspondiente?
Editar: El siguiente código se basa en la respuesta de kwatford. Acepta tanto objetos tipo como int y numpy.int16, y cadenas como "int", u "int" e "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;
}
Eso no responde mi pregunta. Solo tengo el objeto tipo para trabajar. Estoy escribiendo un módulo de extensión de Python donde una de las funciones tiene una interfaz de Python que toma un objeto tipo para un tipo escalar. – user763305
Entonces probablemente esté buscando [PyArray_DescrConverter] (http://docs.scipy.org/doc/numpy/reference/c-api.array.html#PyArray_DescrConverter) que debe tomar un tipo o nombre de un tipo (o otras cosas que puedes dar a 'numpy.dtype') y obtener el descr para él. A partir de eso, puede obtener el número de tipo, tipo, tipo, objeto o cualquier otra cosa que desee. – kwatford
+1: Eso resolvió el problema. Ver edición en mi pregunta anterior. – user763305