2011-07-22 5 views
5

नम्पी (और सामान्य रूप से पाइथन, मुझे लगता है) में, एक टुकड़ा-सूचकांक कैसे स्टोर करता है, जैसे कि (..., 0, :), इसे चारों ओर पास करने और विभिन्न सरणी पर लागू करने के लिए? कहें, कहें, फिसलने के लिए स्लाइस-इंडेक्स को पास करने में सक्षम होना अच्छा होगा।बेवकूफ: एआर [..., 0 ,:] काम करता है। लेकिन मैं स्लाइस कमांड (..., 0, :) में निहित डेटा कैसे स्टोर करूं?

उत्तर

9

पायथन स्लाइस सिंटैक्स से विशेष वस्तुओं को बनाता है, लेकिन केवल अनुक्रमण के लिए स्क्वायर ब्रैकेट के अंदर। आप या तो इस मामले में हाथ से उन वस्तुओं (बना सकते हैं, (...,0,:)(Ellipsis, 0, slice(None, None, None)) है, या आप एक छोटे से सहायक ऑब्जेक्ट बना सकते हैं:

class ExtendedSliceMaker(object): 
    def __getitem__(self, idx): 
     return idx 

>>> ExtendedSliceMaker()[...,0,:] 
(Ellipsis, 0, slice(None, None, None)) 
+0

यह सीधे समस्या हल करता है, मानते हैं कि आप वास्तव में प्रतिनिधित्व के बारे में परवाह नहीं करते हैं या इसका क्या अर्थ है क्योंकि आप इसे नम्पी में उपयोग करने के लिए बस पास करने जा रहे हैं। मेरे पास मूल रूप से एक ही विचार था, लेकिन दिखाया कि कैसे खोदना है और यह पता लगाने के लिए कि सबकुछ क्या है :) –

3

(...,0,:) के बराबर होना चाहिए ...

>>> myslice = (..., 0, slice(None, None)) 
>>> myslice 
(Ellipsis, 0, slice(None, None, None)) 
+0

नहीं, यह नहीं है 'टुकड़ा (0)'; '0' सिर्फ एक सूचकांक है। –

+0

@ थॉमस: हाँ, मैंने खुद को सही किया। – JAB

0

मुझे लगता है कि तुम सिर्फ उदाहरण के लिए एक टुकड़ा है कि 2 तत्व वापस आ जाएगी परिभाषित करने के लिए myslice = टुकड़ा (1,2) (क्या करना चाहते हैं यानी myArray [myslice] == myarray [1: 2])

3

अजगर के बारे में साफ बात यह है कि आप वास्तव में निरीक्षण करने के लिए कैसे इन एक वर्ग बना सकते हैं चीजों का प्रतिनिधित्व किया जाता है। पाइथन इंडेक्सिंग ऑपरेशंस को संभालने के लिए जादू विधि __getitem__ का उपयोग करता है, इसलिए हम एक वर्ग बना देंगे जो हमें दिखाएगा कि कक्षा में तत्काल, और "इंडेक्स इन" को उदाहरण के लिए:

class foo: 
    def __getitem__(self, index): print index 

foo()[...,0,:] 

और हमारा परिणाम है:

(Ellipsis, 0, slice(None, None, None)) 

Ellipsis और slice builtins हैं, और हम अपनी दस्तावेज़ीकरण पढ़ सकते हैं: NumPy में

help(Ellipsis) 
help(slice) 
5

उपयोग s_:

In [1]: np.s_[...,0,:] 
Out[1]: (Ellipsis, 0, slice(None, None, None)) 
संबंधित मुद्दे