2012-06-28 10 views
6

दिए गए एक बहुआयामी सरणी के एक टुकड़े को निकालने के लिए मुझे पता है कि x[:,:,:,:,j,:] (जो आयाम 4 का जेठ टुकड़ा लेता है) लेना है।पायथन: आयाम सूचकांक

यदि आयाम रनटाइम पर ज्ञात है, और एक ज्ञात निरंतर नहीं है, तो वही काम करने का कोई तरीका है? ऐसा करने के लिए

+1

'x [कुछ]' रूप में इंडेक्सिंग ऑब्जेक्ट की '__getitem__' विधि को कॉल करने का पर्याय बन गया है। उदाहरण के लिए, आपका उपरोक्त कोड tuple '(टुकड़ा (कोई नहीं), टुकड़ा (कोई नहीं), टुकड़ा (कोई नहीं), टुकड़ा (कोई नहीं), जे, टुकड़ा (कोई नहीं))' 'x '__ getitem __()' । –

+1

@ जोएल कॉर्नेट: आप इसके लिए '__getitem __()' का उपयोग क्यों करेंगे? '[]' पर क्या फायदा है? –

+0

@ स्वेनमार्कैच: मैं नहीं, मुझे लगा कि ओपी को इस अवधारणा को समझने से फायदा होगा। उनके प्रश्न का उत्तर मामूली है, अगर वह महसूस करता है कि यह केवल एक समारोह में तर्क पारित करने का मामला है। –

उत्तर

6

आप slice समारोह का उपयोग कर सकते हैं और से कॉल करने की रनटाइम के दौरान उचित परिवर्तनीय सूची निम्नानुसार है:

# Store the variables that represent the slice in a list/tuple 
# Make a slice with the unzipped tuple using the slice() command 
# Use the slice on your array 
,210

उदाहरण:

>>> from numpy import * 
>>> a = (1, 2, 3) 
>>> b = arange(27).reshape(3, 3, 3) 
>>> s = slice(*a) 
>>> b[s] 
array([[[ 9, 10, 11], 
     [12, 13, 14], 
     [15, 16, 17]]]) 

इस रूप में ही है:

>>> b[1:2:3] 
array([[[ 9, 10, 11], 
     [12, 13, 14], 
     [15, 16, 17]]]) 

अंत में, हमेशा की तरह अंकन में 2 : के बीच कुछ भी निर्दिष्ट नहीं के बराबर टपल में उन स्थानों में None डाल करने के लिए है आप सर्जन करना।

8

एक विकल्प टुकड़ा करने की क्रिया प्रोग्राम के निर्माण के लिए है:

slicing = (slice(None),) * 4 + (j,) + (slice(None),) 

एक वैकल्पिक का उपयोग numpy.take() या ndarray.take() के लिए है:

>>> a = numpy.array([[1, 2], [3, 4]]) 
>>> a.take((1,), axis=0) 
array([[3, 4]]) 
>>> a.take((1,), axis=1) 
array([[2], 
     [4]]) 
+0

numpy.take मेरे यहां उपयोग करने के लिए सही चीज़ की तरह दिखता है। –

+0

'x' से कुछ निकालने के लिए आप' स्लाइसिंग 'का उपयोग कैसे करते हैं? –

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