2011-12-12 21 views
6

功能NumPy的C-API:轉換類型的對象鍵入號碼

PyObject* PyArray_TypeObjectFromType(int); 

類型號碼轉換爲一個NumPy的標量類型(NPY_BOOL,NPY_BYTE,...)到相應的類型的對象。

如何做相反的轉換,從NumPy標量類型的類型對象到相應的類型編號?

編輯:以下代碼基於kwatford的回答。它接受諸如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; 
} 

回答

4

如果你能得到PyArray_Descr結構,而不是PyArray_TypeObject S,你可以簡單地看一下type_num領域。描述結構可以通過使用PyArray_DescrFromType的類型編號獲取。如果你看看這個鏈接,還有一些功能可以將各種東西轉換爲描述。它們可能比類型對象更有用,並且它們也包含對它們類型的引用。

+0

這不能回答我的問題。我只有類型對象才能使用。我正在編寫一個Python擴展模塊,其中一個函數的Python接口爲標量類型提供了一個類型對象。 – user763305

+3

然後,您可能正在尋找[PyArray_DescrConverter](http://docs.scipy.org/doc/numpy/reference/c-api.array.html#PyArray_DescrConverter),它應該採用類型或類型的名稱(或其他的東西,你可以給'numpy.dtype')並得到它的descr。從中你可以得到類型編號,類型種類,類型對象,或其他任何你想要的。 – kwatford

+0

+1:解決了這個問題。請參閱上面我的問題中的編輯。 – user763305

相關問題