NumPy C-API: преобразовать тип объекта в номер типа - PullRequest
6 голосов
/ 12 декабря 2011

Функция

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;
}

1 Ответ

4 голосов
/ 12 декабря 2011

Если вы можете получить PyArray_Descr структуры вместо PyArray_TypeObject с, вы можете просто посмотреть на поле type_num . Структуры descr можно получить по номеру типа, используя PyArray_DescrFromType . Если вы посмотрите на эту ссылку, есть еще несколько функций для преобразования различных вещей в структуры descr. Они, вероятно, более полезны в целом, чем объекты типов, и они также содержат ссылки на свои типы.

...