मैं एक NumPy nxn सरणी का टुकड़ा करना चाहता हूं। मैं उस सरणी की m पंक्तियों और स्तंभों का एक मनमाना चयन करना चाहता हूं (अर्थात पंक्तियों / स्तंभों की संख्या में बिना किसी पैटर्न के), यह एक नया, mxm सरणी बनाता है। इस उदाहरण के लिए मान लीजिए कि सरणी 4x4 है और मैं इसमें से 2x2 सरणी निकालना चाहता हूं।
यहाँ हमारे सरणी है:
from numpy import *
x = range(16)
x = reshape(x,(4,4))
print x
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
निकालने के लिए लाइन और कॉलम समान हैं। सबसे आसान मामला तब है जब मैं एक 2x2 सबमेट्रिक्स निकालना चाहता हूं जो शुरुआत में या अंत में है, यानी:
In [33]: x[0:2,0:2]
Out[33]:
array([[0, 1],
[4, 5]])
In [34]: x[2:,2:]
Out[34]:
array([[10, 11],
[14, 15]])
लेकिन क्या होगा अगर मुझे पंक्तियों / स्तंभों का एक और मिश्रण निकालने की आवश्यकता है? क्या होगा अगर मुझे पहली और तीसरी पंक्तियों / पंक्तियों को हटाने की आवश्यकता है, इस प्रकार सबमेट्रिक्स को निकालना [[5,7],[13,15]]
? पंक्तियों / रेखाओं की कोई भी रचना हो सकती है। मैंने कहीं पढ़ा है कि मुझे केवल पंक्तियों और स्तंभों के लिए सरणियों / सूचियों की सूची का उपयोग करके अपने सरणी को अनुक्रमित करने की आवश्यकता है, लेकिन यह काम नहीं करता है:
In [35]: x[[1,3],[1,3]]
Out[35]: array([ 5, 15])
मुझे एक रास्ता मिला, जो है:
In [61]: x[[1,3]][:,[1,3]]
Out[61]:
array([[ 5, 7],
[13, 15]])
इसके साथ पहला मुद्दा यह है कि यह शायद ही पठनीय है, हालांकि मैं इसके साथ रह सकता हूं। अगर किसी के पास बेहतर समाधान है, तो मैं निश्चित रूप से इसे सुनना चाहूंगा।
अन्य बात यह है कि मैंने एक मंच पर पढ़ा है कि सरणियों के साथ अनुक्रमण अनुक्रमणिका वांछित सरणी की एक प्रतिलिपि बनाने के लिए NumPy को बाध्य करता है, इस प्रकार जब बड़े सरणियों के साथ इलाज किया जाता है तो यह एक समस्या बन सकती है। ऐसा क्यों है / यह तंत्र कैसे काम करता है?