2011-12-12 23 views
6

NumPy Cı-API: dönüştürme türü nesne numaralı

PyObject* PyArray_TypeObjectFromType(int); 

karşılık gelen bir tür nesne için bir NumPy skalar türü (NPY_BOOL, NPY_BYTE, ...) için tip numarasını çevirir fonksiyonu için gereklidir.

Tersine dönüştürmeyi, NumPy scalar tipi için yazım nesnesinden gelen tür numarasına nasıl yazarsınız?

Düzenleme: Aşağıdaki kod kwatford'un yanıtını temel alır. Int ve numpy.int16 gibi tür nesneleri ve "int", u "int" ve "int16" gibi dizeleri kabul eder. Eğer PyArray_Descr yapılar yerine PyArray_TypeObject s alabilirsiniz

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

cevap

4

, sadece type_num alanına bakabilirsiniz. Alt yapıları PyArray_DescrFromType kullanarak tip numarasıyla edinilebilir. Bu bağlantıya bakarsanız, çeşitli şeyleri alt yapılara dönüştürmek için birkaç işlev daha vardır. Genelde tip objelerden daha faydalıdırlar ve türlerine de referanslar içerirler.

+0

Bu benim soruma cevap vermiyor. Sadece çalışacak tip nesnesine sahibim. Fonksiyonlardan birinin skaler tip için bir yazım nesnesini alan bir Python arabirimine sahip olduğu bir Python uzantı modülü yazıyorum. – user763305

+3

O zaman muhtemelen bir tür veya bir tür adı alması gereken [PyArray_DescrConverter] (http://docs.scipy.org/doc/numpy/reference/c-api.array.html#PyArray_DescrConverter) 'ı arıyorsanız (veya "numpy.dtype" 'e verebileceğiniz diğer şeyler) ve bunun için descr olsun. Bundan tür numarası alabilir, tür yazabilir, nesneyi veya istediğiniz herhangi bir şeyi yazabilirsiniz. – kwatford

+0

+1: Sorun çözüldü. Yukarıdaki sorudaki düzenlemeye bakın. – user763305

İlgili konular