मैं बस की खोज की - संयोग से - कि numpy
में एक सरणी एक खाली टपल द्वारा अनुक्रमित किया जा सकता है:numpy में, खाली tuple बनाम ellipsis के साथ एक सरणी अनुक्रमणित क्या करता है?
In [62]: a = arange(5)
In [63]: a[()]
Out[63]: array([0, 1, 2, 3, 4])
मैं numpy wiki ZeroRankArray पर कुछ प्रलेखन पाया:
(साशा) पहले, जो कुछ भी पसंद एक्स [...] और एक्स [()] के लिए बनाया गया है क्योंकि वे वही होना चाहिए क्योंकि ... "जितना आवश्यक हो उतना आवश्यक" के लिए सिंटैक्टिक चीनी है, जो शून्य रैंक के मामले में होता है ... = (:,) * 0 =()। दूसरा, रैंक शून्य सरणी और numpy scalar प्रकार numpy के भीतर अंतर-परिवर्तनीय हैं, लेकिन कुछ पाइथन संरचनाओं में numpy scalars का उपयोग किया जा सकता है जहां ndarrays नहीं कर सकते हैं।
तो, 0-डी सरणियों a[()]
और a[...]
के लिए बराबर होना चाहिए रहे हैं। क्या वे उच्च-आयामी सरणी भी हैं? वे दृढ़ता से प्रतीत होते हैं:
In [65]: a = arange(25).reshape(5, 5)
In [66]: a[()] is a[...]
Out[66]: False
In [67]: (a[()] == a[...]).all()
Out[67]: True
In [68]: a = arange(3**7).reshape((3,)*7)
In [69]: (a[()] == a[...]).all()
Out[69]: True
लेकिन, यह नहीं वाक्यात्मक चीनी है।
In [76]: a[()] is a
Out[76]: False
In [77]: a[...] is a
Out[77]: True
In [79]: b = array(0)
In [80]: b[()] is b
Out[80]: False
In [81]: b[...] is b
Out[81]: True
और फिर वहाँ एक खाली सूची, जो कुछ और पूरी तरह से करता है द्वारा अनुक्रमण के मामले है, लेकिन के बराबर प्रकट होता है: एक उच्च आयामी सरणी के लिए, और नहीं भी 0-डी सरणी के लिए नहीं एक खाली ndarray
साथ अनुक्रमण:
In [78]: a[[]]
Out[78]: array([], shape=(0, 3, 3, 3, 3, 3, 3), dtype=int64)
In [86]: a[arange(0)]
Out[86]: array([], shape=(0, 3, 3, 3, 3, 3, 3), dtype=int64)
In [82]: b[[]]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
IndexError: 0-d arrays can't be indexed.
तो, ऐसा लगता है कि ()
और ...
समान है, लेकिन काफी समान नहीं और अनुक्रमण हैं []
कुछ और मतलब है के साथ पूरी तरह। और a[]
या b[]
SyntaxError
एस हैं। सूचियों के साथ अनुक्रमण index arrays पर दस्तावेज किया गया है, और tuples at the end of the same document के साथ अनुक्रमण के बारे में एक छोटी सूचना है।
सवाल छोड़ कि:
a[()]
और a[...]
डिजाइन द्वारा के बीच का अंतर है? फिर डिजाइन क्या है?
(प्रश्न के किसी भी तरह याद ताजा: What does the empty `()` do on a Matlab matrix?)
संपादित करें:
वास्तव में, यहां तक कि scalars एक खाली टपल द्वारा अनुक्रमित किया जा सकता है:
In [36]: numpy.int64(10)[()]
Out[36]: 10
'ए [(:,) * एन्डिम्स] 'पाइथन 3.2, numpy 1.6.2 पर' सिंटेक्स त्रुटि 'फेंकता है। मुझे लगता है कि यह अधिक बोझिल होना चाहिए 'ए [(टुकड़ा (कोई नहीं),) * एन्डिम] '(भी, यह' एन्डिम 'है, न कि' एन्डिम्स ')। – gerrit
@gerrit धन्यवाद, तय। – ecatmur