2011-12-12 14 views
6

टाइप करने के लिए समारोहNumPy सी एपीआई: परिवर्तित प्रकार वस्तु संख्या

PyObject* PyArray_TypeObjectFromType(int); 

एक NumPy अदिश प्रकार (NPY_BOOL, NPY_BYTE, ...) इसी प्रकार वस्तु के लिए प्रकार संख्या बदल देता है।

आप प्रकार के ऑब्जेक्ट से न्यूमपी स्केलर प्रकार के संबंधित प्रकार संख्या में विपरीत रूपांतरण कैसे करते हैं?

संपादित करें: निम्नलिखित कोड 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 structs PyArray_TypeObject रों प्राप्त कर सकते हैं, तो आप बस type_num क्षेत्र देख सकते हैं। Descr structs PyArray_DescrFromType का उपयोग कर प्रकार संख्या के माध्यम से अधिग्रहित किया जा सकता है। यदि आप उस लिंक को देखते हैं, तो विभिन्न चीजों को descr structs में परिवर्तित करने के लिए कुछ और फ़ंक्शन भी हैं। वे टाइप ऑब्जेक्ट्स की तुलना में सामान्य रूप से अधिक उपयोगी होते हैं, और उनमें उनके प्रकार के संदर्भ भी शामिल होते हैं।

+0

यह मेरे प्रश्न का उत्तर नहीं देता है। मेरे पास काम करने के लिए केवल ऑब्जेक्ट ऑब्जेक्ट है। मैं एक पायथन एक्सटेंशन मॉड्यूल लिख रहा हूं जहां कार्यों में से एक में पाइथन इंटरफ़ेस है जो स्केलर प्रकार के लिए एक प्रकार ऑब्जेक्ट लेता है। – user763305

+3

फिर आप शायद [PyArray_DescrConverter] (http://docs.scipy.org/doc/numpy/reference/c-api.array.html#PyArray_DescrConverter) की तलाश कर रहे हैं, जिसे किसी प्रकार का प्रकार या नाम लेना चाहिए (या अन्य चीजें जिन्हें आप 'numpy.dtype' को दे सकते हैं) और इसके लिए descr प्राप्त करें। उस से आप टाइप नंबर, प्रकार टाइप करें, ऑब्जेक्ट टाइप करें, या जो कुछ भी आप चाहते हैं। – kwatford

+0

+1: जिसने समस्या हल की। उपरोक्त मेरे प्रश्न में संपादित देखें। – user763305

संबंधित मुद्दे