यह पायथन की छिपी हुई विशेषताओं में सामने आया , लेकिन मैं अच्छे प्रलेखन या उदाहरण नहीं देख सकता हूं जो बताते हैं कि फीचर कैसे काम करता है।
यह पायथन की छिपी हुई विशेषताओं में सामने आया , लेकिन मैं अच्छे प्रलेखन या उदाहरण नहीं देख सकता हूं जो बताते हैं कि फीचर कैसे काम करता है।
जवाबों:
Ellipsis
, या ...
एक छिपी हुई विशेषता नहीं है, यह सिर्फ एक स्थिर है। यह जावास्क्रिप्ट ईएस 6, जहां यह भाषा वाक्य रचना का एक हिस्सा है, से काफी भिन्न है। कोई भी निर्मित वर्ग या पायथन भाषा की कमी इसका उपयोग नहीं करती है।
तो इसके लिए वाक्यविन्यास पूरी तरह से आप या किसी और पर निर्भर करता है, इसे समझने के लिए लिखित कोड।
जैसा कि प्रलेखन में कहा गया है, नम्पी इसका उपयोग करती है । कुछ उदाहरण यहाँ ।
अपनी कक्षा में, आप इसे इस तरह उपयोग करेंगे:
>>> class TestEllipsis(object):
... def __getitem__(self, item):
... if item is Ellipsis:
... return "Returning all items"
... else:
... return "return %r items" % item
...
>>> x = TestEllipsis()
>>> print x[2]
return 2 items
>>> print x[...]
Returning all items
बेशक, अजगर प्रलेखन , और भाषा संदर्भ है । लेकिन वे बहुत उपयोगी नहीं हैं।
दीर्घवृत्त का उपयोग उच्च खगोलीय डेटा संरचनाओं को स्लाइस करने के लिए खसखस में किया जाता है।
यह इस बिंदु पर:
मतलब करने के लिए डिज़ाइन किया गया है , सभी आयामों के लिए बहुआयामी टुकड़ा का विस्तार करने के लिए कई पूर्ण स्लाइस ( ) के रूप में डालें ।
उदाहरण :
>>> from numpy import arange
>>> a = arange(16).reshape(2,2,2,2)
अब, आपके पास ऑर्डर 2x2x2x2 का 4-आयामी मैट्रिक्स है। 4 वें आयाम में सभी पहले तत्वों का चयन करने के लिए, आप एलिप्सिस नोटेशन का उपयोग कर सकते हैं
>>> a[..., 0].flatten()
array([ 0, 2, 4, 6, 8, 10, 12, 14])
जो के बराबर है
>>> a[:,:,:,0].flatten()
array([ 0, 2, 4, 6, 8, 10, 12, 14])
अपने स्वयं के कार्यान्वयन में, आप ऊपर बताए गए अनुबंध को अनदेखा करने के लिए स्वतंत्र हैं और जो कुछ भी आप फिट देखते हैं, उसका उपयोग करें।
a[:,:,:,0]
कोई कॉपी a[...,0]
लौटाएगा और "दृश्य" लौटाएगा और कॉपी नहीं? मैंने id()
दोनों संस्करणों के लिए और 3-मंद सरणी के लिए दौड़ने की कोशिश की : a[:,:,:, 0], a[:,:,:, 1], a[:,:,:, 2]
सभी में अलग-अलग आईडी हैं जबकि a[..., 0], a[..., 1], a[..., 2]
सभी में एक ही आईडी है।
id()
दोनों के लिए समान मूल्य लौटाता है। साथ ही चेक करने __array_interface__['data']
से एक ही मैमोरी एड्रेस पता चलता है।
a[indexes, ...]
जबकि एक 1-मंदक सरणी भी है!
यह एलिप्सिस के लिए एक और उपयोग है, जिसका स्लाइस से कोई लेना-देना नहीं है: मैं अक्सर इसे क्यू के साथ इंट्रा-थ्रेड संचार में उपयोग करता हूं, एक निशान के रूप में जो "संकेत" करता है; यह वहां है, यह एक वस्तु है, यह एक सिंगलटन है, और इसके नाम का अर्थ है "कमी", और यह अति प्रयोग नहीं है (जो सामान्य डेटा प्रवाह के हिस्से के रूप में एक कतार में रखा जा सकता है)। YMMV।
जैसा कि अन्य उत्तरों में कहा गया है, इसका उपयोग स्लाइस बनाने के लिए किया जा सकता है। उपयोगी जब आप कई पूर्ण स्लाइस नोटेशन नहीं लिखना चाहते हैं (:
) , या जब आप सरणी के आयामी होने की गतिशीलता पर सिर्फ यकीन नहीं कर रहे हैं।
मैंने हाइलाइट करने के लिए जो महत्वपूर्ण समझा, और जो अन्य उत्तरों पर गायब था, वह यह है कि इसका उपयोग तब भी किया जा सकता है, जब कोई और आयाम न हो।
उदाहरण:
>>> from numpy import arange
>>> a = arange(4).reshape(2,2)
इसके परिणामस्वरूप त्रुटि होगी:
>>> a[:,0,:]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: too many indices for array
यह काम करेगा:
a[...,0,:]
array([0, 1])