La funzioneNumPy C-API: convertire tipo di oggetto per digitare il numero
PyObject* PyArray_TypeObjectFromType(int);
converte il numero del tipo per un NumPy tipo scalare (NPY_BOOL, NPY_BYTE, ...) all'oggetto tipo corrispondente.
Come si esegue la conversione opposta, dall'oggetto tipo per un tipo scalare NumPy al numero di tipo corrispondente?
Modifica: Il seguente codice è basato sulla risposta di kwatford. Accetta sia oggetti di tipo come int e numpy.int16, sia stringhe come "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;
}
Questo non risponde alla mia domanda. Ho solo l'oggetto tipo con cui lavorare. Sto scrivendo un modulo di estensione Python in cui una delle funzioni ha un'interfaccia Python che accetta un oggetto di tipo per un tipo scalare. – user763305
Quindi probabilmente stai cercando [PyArray_DescrConverter] (http://docs.scipy.org/doc/numpy/reference/c-api.array.html#PyArray_DescrConverter) che dovrebbe richiedere un tipo o un nome di un tipo (o altre cose che puoi dare a 'numpy.dtype') e ottieni il descr per esso. Da ciò puoi ottenere il numero del tipo, il tipo di tipo, il tipo di oggetto o qualsiasi altra cosa desideri. – kwatford
+1: questo ha risolto il problema. Vedi modifica nella mia domanda sopra. – user763305