2012-09-27 19 views
6

से बेवकूफ स्लाइसिंग मैं एक चर में एक पूर्वनिर्धारित एक टुकड़ा का उपयोग कर एक numpy सरणी टुकड़ा करने की कोशिश कर रहा हूँ। यह काम करता है:परिवर्तनीय

b = fromfunction(lambda x,y: 10*x+y, (5,4),dtype=int) # Just some matrix 

b[1:3,1:3] 
# Output: 
# array([[11, 12], 
#  [21, 22]]) 

लेकिन मुझे क्या करना चाहते हैं तो इस तरह somthing है:

slice = "1:3,1:3" 
b[slice] 
# Output: 
# array([[11, 12], 
#  [21, 22]]) 

यह मेरे लिए महत्वपूर्ण नहीं हैं कि किस प्रकार टुकड़ा-चर है, मैं सिर्फ एक स्ट्रिंग के रूप का उपयोग कर रहा है एक उदाहरण। मैं इस तरह एक टुकड़ा-विनिर्देशक कैसे बचा सकता हूं?

उत्तर

13

आप उपयोग कर सकते हैं में निर्मित slice समारोह

s = slice(1,3) 
b[s,s] 

ds = (s,s) 
b[ds] 
+0

बिल्कुल सही। मैं टुकड़ा-फ़ंक्शन देख रहा था, लेकिन स्पष्ट रूप से पर्याप्त रूप से पर्याप्त नहीं था :-) धन्यवाद (जैसे ही टाइमर मुझे अनुमति देता है) मैं स्वीकार करूंगा। – XerXes

7

numpy.s_ and numpy.index_exp ऐसा करने का एक सुविधाजनक तरीका प्रदान करते हैं:

the_slice = numpy.index_exp[1:3, 1:3] 
b[the_slice] 

वे कुछ भी है कि आप एक साथ नहीं कर सकते ऐसा नहीं कर सकते slice, tuples, None, और Ellipsis का संयोजन, लेकिन वे आपको एक ही वाक्यविन्यास का उपयोग करने की अनुमति देते हैं, जैसा कि आप सरणी को टुकड़ा करने के लिए उपयोग करेंगे (s_ औरके बीच केवल अंतरयह है कि एक-आयामी टुकड़ा के लिए, s_ एक स्लाइस ऑब्जेक्ट देता है, जबकि index_exp इसे टुपल में लपेटता है)।