2011-12-12 26 views
6

Chức năngNumPy C-API: chuyển đổi loại đối tượng để gõ số

PyObject* PyArray_TypeObjectFromType(int); 

chuyển số kiểu cho một vô hướng loại NumPy (NPY_BOOL, NPY_BYTE, ...) cho các đối tượng loại tương ứng.

Làm cách nào để bạn thực hiện chuyển đổi ngược lại, từ đối tượng loại cho loại vô hướng NumPy sang số loại tương ứng?

Chỉnh sửa: Mã sau dựa trên câu trả lời của kwatford. Nó chấp nhận cả hai đối tượng kiểu như int và numpy.int16 và các chuỗi như "int", u "int" và "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; 
} 

Trả lời

4

Nếu bạn có thể nhận PyArray_Descr cấu trúc hơn là PyArray_TypeObject s, bạn chỉ có thể nhìn vào các lĩnh vực type_num. Các cấu trúc descr có thể được mua thông qua số kiểu sử dụng PyArray_DescrFromType. Nếu bạn nhìn vào liên kết đó, cũng có một vài hàm nữa để chuyển đổi nhiều thứ khác nhau thành các cấu trúc descr. Chúng có thể hữu ích hơn nói chung so với các đối tượng kiểu, và chúng chứa các tham chiếu đến các kiểu của chúng.

+0

Điều đó không trả lời được câu hỏi của tôi. Tôi chỉ có đối tượng kiểu để làm việc. Tôi đang viết một mô-đun mở rộng Python trong đó một trong các hàm có giao diện Python lấy một đối tượng kiểu cho một loại vô hướng. – user763305

+3

Sau đó, bạn có thể đang tìm kiếm [PyArray_DescrConverter] (http://docs.scipy.org/doc/numpy/reference/c-api.array.html#PyArray_DescrConverter) cần có loại hoặc tên của một loại (hoặc những thứ khác bạn có thể cung cấp cho 'numpy.dtype') và nhận được descr cho nó. Từ đó bạn có thể lấy số kiểu, nhập loại, nhập đối tượng hoặc bất kỳ thứ gì bạn muốn. – kwatford

+0

+1: Điều đó giải quyết được vấn đề. Xem chỉnh sửa trong câu hỏi của tôi ở trên. – user763305

Các vấn đề liên quan