NumPy 1.14

Scalars




numpy

Scalars

पायथन केवल एक विशेष डेटा वर्ग का एक प्रकार परिभाषित करता है (केवल एक पूर्णांक प्रकार, एक फ़्लोटिंग-पॉइंट प्रकार, आदि है)। यह उन अनुप्रयोगों में सुविधाजनक हो सकता है, जिन्हें किसी कंप्यूटर में डेटा का प्रतिनिधित्व करने के सभी तरीकों से चिंतित होने की आवश्यकता नहीं है। वैज्ञानिक कंप्यूटिंग के लिए, हालांकि, अधिक नियंत्रण की आवश्यकता अक्सर होती है।

NumPy में, विभिन्न प्रकार के स्केलरों का वर्णन करने के लिए 24 नए मौलिक पायथन प्रकार हैं। इस प्रकार के वर्णनकर्ता ज्यादातर सी भाषा में उपलब्ध प्रकारों पर आधारित होते हैं जो कि सीपीथॉन में लिखे गए हैं, जिसमें पायथन के प्रकारों के साथ संगत कई अतिरिक्त प्रकार हैं।

सरणी स्केलर में ndarrays के समान गुण और विधियाँ हैं। [1] यह किसी सारणी की वस्तुओं को आंशिक रूप से एरेज़ के समान व्यवहार करने देता है, खुरदुरे किनारों को चिकना करता है जिसके परिणामस्वरूप स्केलर और सरणी संचालन को मिलाते हैं।

एरे स्केलर डेटा प्रकारों के एक पदानुक्रम (नीचे चित्र देखें) में रहते हैं। पदानुक्रम का उपयोग करके उनका पता लगाया जा सकता है: उदाहरण के लिए, isinstance(val, np.generic) True वापस आ जाएगा यदि वैल एक सरणी स्केलर ऑब्जेक्ट है। वैकल्पिक रूप से, किस प्रकार का सरणी स्केलर मौजूद है, यह डेटा प्रकार पदानुक्रम के अन्य सदस्यों का उपयोग करके निर्धारित किया जा सकता है। इस प्रकार, उदाहरण के लिए isinstance(val, np.complexfloating) True लौटेगा यदि वैल एक जटिल मूल्यवान प्रकार है, जबकि isinstance(val, np.flexible) सच लौटेगा यदि वैल लचीली आइटम आकार प्रकार ( string , unicode में से एक है void )।

../_images/dtype-hierarchy.png

चित्र: सरणी डेटा प्रकारों का प्रतिनिधित्व करने वाली प्रकार की वस्तुओं का पदानुक्रम। दिखाया नहीं दो पूर्णांक प्रकार intp और uintp जो केवल उस पूर्णांक प्रकार को इंगित करते हैं जो प्लेटफ़ॉर्म के लिए एक संकेतक रखता है। सभी संख्या प्रकारों को बिट-चौड़ाई नामों के साथ ही प्राप्त किया जा सकता है।

[1] हालाँकि, सरणी स्केलर अपरिवर्तनीय हैं, इसलिए किसी भी प्रकार की स्केल स्केलर विशेषताएँ व्यवस्थित नहीं हैं।

अंतर्निहित स्केलर प्रकार

अंतर्निहित स्केलर प्रकार नीचे दिखाए गए हैं। उनके (अधिकतर) सी-व्युत्पन्न नामों के साथ, पूर्णांक, फ्लोट और जटिल डेटा-प्रकार भी थोड़ी-चौड़ाई वाले सम्मेलन का उपयोग करके उपलब्ध हैं, ताकि सही आकार की एक सरणी हमेशा सुनिश्चित की जा सके (जैसे float64 , complex128 , complex128 ) । पूर्णांक प्रकार को इंगित करने वाले दो उपनाम ( intp और uintp ) जो कि C पॉइंटर धारण करने के लिए पर्याप्त रूप से बड़े हैं, भी प्रदान किए जाते हैं। सी-जैसे नाम चरित्र कोड से जुड़े हैं, जो तालिका में दिखाए गए हैं। हालाँकि, वर्ण कोड का उपयोग हतोत्साहित किया जाता है।

स्केलर के कुछ प्रकार मूल रूप से मूल पायथन प्रकारों के समतुल्य होते हैं और इसलिए उनसे और साथ ही जेनेरिक सरणी प्रकार से विरासत में मिलते हैं:

स्केल स्केलर टाइप करें संबंधित पायथन प्रकार
int_ IntType (केवल पायथन 2)
float_ FloatType
complex_ ComplexType
bytes_ BytesType
unicode_ UnicodeType

bool_ डेटा प्रकार पाइथन BooleanType टाइप के समान है, लेकिन इसे इनहेरिट नहीं किया जाता है क्योंकि पाइथन का BooleanType स्वयं से इनहेरिट करने की अनुमति नहीं देता है, और सी-लेवल पर वास्तविक बूल डेटा का आकार पायथन बूलियन के समान नहीं है। अदिश।

चेतावनी

bool_ प्रकार bool_ प्रकार का एक उपवर्ग नहीं है ( bool_ एक संख्या प्रकार भी नहीं है)। यह bool के इंट-क्लास के रूप में bool के डिफ़ॉल्ट कार्यान्वयन से अलग है।

चेतावनी

int_ प्रकार पाइथन 3 के तहत निर्मित int से नहीं मिलता है, क्योंकि टाइप int अब निश्चित-चौड़ाई पूर्णांक प्रकार नहीं है।

टिप

NumPy में डिफ़ॉल्ट डेटा प्रकार float_

नीचे दी गई तालिकाओं में, platform? इसका मतलब है कि प्रकार सभी प्लेटफार्मों पर उपलब्ध नहीं हो सकता है। विभिन्न सी या पायथन प्रकारों के साथ संगतता का संकेत दिया गया है: दो प्रकार संगत हैं यदि उनका डेटा एक ही आकार का है और उसी तरह व्याख्या की गई है।

बूलियन्स:

प्रकार टिप्पणियों चरित्र कोड
bool_ संगत: अजगर बूल '?'
bool8 8 बिट्स

पूर्णांकों:

byte संगत: सी चार 'b'
short संगत: सी छोटी 'h'
intc संगत: सी int 'i'
int_ संगत: पायथन इंट 'l'
longlong संगत: सी लंबे समय तक 'q'
intp एक पॉइंटर फिट करने के लिए काफी बड़ा 'p'
int8 8 बिट्स
int16 16 बिट्स
int32 32 बिट्स
int64 64 बिट्स

निरुपित पूर्णांक:

ubyte संगत: सी अहस्ताक्षरित चार 'B'
ushort संगत: C अहस्ताक्षरित छोटा 'H'
uintc संगत: C अहस्ताक्षरित int 'I'
uint संगत: पायथन इंट 'L'
ulonglong संगत: सी लंबे समय तक 'Q'
uintp एक पॉइंटर फिट करने के लिए काफी बड़ा 'P'
uint8 8 बिट्स
uint16 16 बिट्स
uint32 32 बिट्स
uint64 64 बिट्स

दशमलव संख्याएं:

half 'e'
single संगत: सी फ्लोट 'f'
double संगत: सी डबल
float_ संगत: अजगर तैरता है 'd'
longfloat संगत: सी लंबी नाव 'g'
float16 16 बिट्स
float32 32 बिट्स
float64 64 बिट्स
float96 96 बिट, मंच?
float128 128 बिट, मंच?

जटिल फ़्लोटिंग-पॉइंट नंबर:

csingle 'F'
complex_ संगत: अजगर जटिल 'D'
clongfloat 'G'
complex64 दो 32-बिट फ़्लोट
complex128 दो 64-बिट फ्लोट
complex192 दो 96-बिट फ़्लोट, मंच?
complex256 दो 128-बिट फ़्लोट, प्लेटफ़ॉर्म?

कोई पायथन ऑब्जेक्ट:

object_ कोई पायथन ऑब्जेक्ट 'O'

ध्यान दें

डेटा वास्तव में ऑब्जेक्ट सरणियों में संग्रहित होता है ( यानी , dtype object_ वाले सरणियाँ) पायथन ऑब्जेक्ट्स के संदर्भ हैं, न कि ऑब्जेक्ट्स स्वयं। इसलिए, ऑब्जेक्ट सरणियां सामान्य पायथन lists तरह अधिक व्यवहार lists , इस अर्थ में कि उनकी सामग्री एक ही पायथन प्रकार की नहीं होनी चाहिए।

ऑब्जेक्ट प्रकार भी विशेष है क्योंकि ऑब्जेक्ट_ आइटमों पर एक सरणी आइटम एक्सेस पर ऑब्जेक्ट_ ऑब्जेक्ट नहीं object_ , लेकिन इसके बजाय एरे आइटम को संदर्भित करने वाली वास्तविक ऑब्जेक्ट वापस कर देती है।

निम्न डेटा प्रकार लचीले हैं । उनके पास कोई पूर्वनिर्धारित आकार नहीं है: उनके द्वारा वर्णित डेटा विभिन्न सरणियों में अलग-अलग लंबाई का हो सकता है। (वर्ण कोड में # एक पूर्णांक है जिसमें यह दर्शाया गया है कि डेटा प्रकार में कितने तत्व हैं।)

bytes_ संगत: पायथन बाइट्स 'S#'
unicode_ संगत: पायथन यूनिकोड / str 'U#'
void 'V#'

चेतावनी

स्ट्रिंग प्रकार पर ध्यान दें देखें।

न्यूमेरिक कम्पैटिबिलिटी: यदि आपने अपने न्यूमेरिक कोड में पुराने टाइपबेल कैरेक्टर का इस्तेमाल किया है (जो कि कभी अनुशंसित नहीं था), तो आपको उनमें से कुछ को नए कैरेक्टर में बदलने की जरूरत होगी। विशेष रूप से, आवश्यक परिवर्तन c -> S1 , b -> B , 1 -> b , s -> h , w -> H , और u -> I । इन परिवर्तनों से टाइप चरित्र सम्मेलन अन्य पायथन मॉड्यूल जैसे कि मॉड्यूल मॉड्यूल के अनुरूप होता है।

गुण

सरणी स्केलर ऑब्जेक्ट्स में NPY_SCALAR_PRIORITY (-1,000,000.0) की array priority है। वे भी (अभी तक) एक ctypes विशेषता नहीं है। अन्यथा, वे सरणियों के समान गुण साझा करते हैं:

generic.flags झंडे का पूर्णांक मूल्य
generic.shape सरणी आयामों का टपल
generic.strides प्रत्येक आयाम में बाइट्स के स्टेप्स
generic.ndim सरणी आयामों की संख्या
generic.data सूचक डेटा की शुरुआत करने के लिए
generic.size जेंटाइप में तत्वों की संख्या
generic.itemsize बाइट्स में एक तत्व की लंबाई
generic.base आधार वस्तु
generic.dtype सरणी डेटा-डिस्क्रिप्टर प्राप्त करें
generic.real अदिश का वास्तविक हिस्सा
generic.imag स्केलर का काल्पनिक हिस्सा
generic.flat स्केलर का 1-डी दृश्य
generic.T खिसकाना
generic.__array_interface__ ऐरे प्रोटोकॉल: पायथन साइड
generic.__array_struct__ सरणी प्रोटोकॉल: संरचना
generic.__array_priority__ प्राथमिकता प्राथमिकता।
generic.__array_wrap__ sc .__ array_wrap __ (obj) सरणी से स्केलर लौटाएं

इंडेक्सिंग

सरणी स्केलरों को 0-आयामी सरणियों की तरह अनुक्रमित किया जा सकता है: यदि x एक सरणी स्केलर है,

  • x[()] सरणी स्केलर की एक प्रति लौटाता है
  • x[...] 0-आयामी ndarrays
  • x['field-name'] फ़ील्ड फ़ील्ड-नाम में सरणी स्केलर लौटाता है। ( x में फ़ील्ड्स हो सकते हैं, उदाहरण के लिए, जब यह एक संरचित डेटा प्रकार से मेल खाता है।)

तरीके

ऐरे स्केलर में ऐरे के समान तरीके होते हैं। इन विधियों का डिफ़ॉल्ट व्यवहार आंतरिक रूप से स्केलर को समान 0-आयामी सरणी में परिवर्तित करना और संबंधित सरणी विधि को कॉल करना है। इसके अलावा, सरणी स्केलर पर गणित के संचालन को परिभाषित किया जाता है ताकि समान हार्डवेयर झंडे सेट हो जाएं और परिणाम को ufunc रूप में व्याख्या करने के लिए उपयोग किया ufunc , ताकि ufuncs के लिए उपयोग किए जाने वाले त्रुटि राज्य भी सरणी स्केलर पर गणित को ले जाए।

उपरोक्त नियमों के अपवाद नीचे दिए गए हैं:

generic आधार श्रेणी, खस्ता स्केलर प्रकारों के लिए।
generic.__array__ sc .__ सरणी __ ( | प्रकार) वापसी 0-मंद सरणी
generic.__array_wrap__ sc .__ array_wrap __ (obj) सरणी से स्केलर लौटाएं
generic.squeeze लागू नहीं (आभासी विशेषता)
generic.byteswap लागू नहीं (आभासी विशेषता)
generic.__reduce__
generic.__setstate__
generic.setflags लागू नहीं (आभासी विशेषता)

नए प्रकारों को परिभाषित करना

एक नई सरणी स्केलर प्रकार को प्रभावी ढंग से परिभाषित करने के लिए दो तरीके हैं (अंतर्निर्मित स्केलर प्रकारों से संरचित प्रकार dtypes की रचना के अलावा): एक तरीका बस ndarray को उप-वर्ग करना और ब्याज के तरीकों को अधिलेखित करना है। यह एक हद तक काम करेगा, लेकिन आंतरिक रूप से कुछ व्यवहार सरणी के डेटा प्रकार द्वारा तय किए जाते हैं। सरणी के डेटा प्रकार को पूरी तरह से अनुकूलित करने के लिए आपको एक नए डेटा-प्रकार को परिभाषित करने की आवश्यकता है, और इसे NumPy के साथ पंजीकृत करें। ऐसे नए प्रकारों को केवल C में परिभाषित किया जा सकता है, NumPy C-API का उपयोग करके।