2011-06-06 11 views
5

की कुछ गैर-लगातार पंक्तियों और स्तंभों के साथ सबमिटर बनाने के लिए कैसे मेरे पास 10 से 10 मैट्रिक्स हैं। मैं 1, 2 और 8 वें कॉलम और पंक्तियों को छोड़कर सभी पंक्तियों और स्तंभों का उपयोग करके, इस मुख्य मैट्रिक्स से उप-मैट्रिक्स बनाना चाहता हूं।
मुझे पता है कि भाग उप-मैट्रिक्स बनाने के लिए उपयोग किया जा सकता है, लेकिन उदाहरण केवल लगातार पंक्तियों और स्तंभों का उपयोग करके उप-मैट्रिक्स बनाने के बारे में हैं।मैट्रिक्स

+0

Sreya, StackOverflow पर स्वागत के साथ तुलना करें है! नीचे दिए गए उत्तर (उत्तर) के लिए वोट देना न भूलें और यदि उनमें से कोई आपकी संतुष्टि के लिए आपके प्रश्न का उत्तर दे, तो कृपया उत्तर के बगल में स्थित चेक-मार्क का उपयोग करके इसे स्वीकार करें। जब चाहें आप अपनी पसंद बदल सकते हैं। –

+2

[यहां] देखें (http://stackoverflow.com/q/5299798/499167) निकट से संबंधित SO प्रश्न के लिए जो ब्याज का हो सकता है। WReach ने दो बहुत ही उपयोगी कार्यों, 'टेकऑपरेटर' और 'ड्रॉपऑपरेटर' का वर्णन किया है जो आप जो भी पूछते हैं, वह भी करेंगे। [यहां] देखें (http://stackoverflow.com/questions/5299798/efficient-way-to-pick-delete-a-list-of-rows-columns-in-a-matrix-in-mathematica/5300892#5300892) – tomd

उत्तर

7

यह आपके मैट्रिक्स है:

tst = RandomInteger[10, {10, 10}]; 

यह हाथ में मामले के लिए चाल करना होगा:

tst[[{3, 4, 5, 6, 7, 9, 10}, {3, 4, 5, 6, 7, 9, 10}]] 

स्पष्ट सूची के बजाय, आप Complement[Range[10],{1,2,8}] इस्तेमाल कर सकते हैं।

6

यहां एक और तरीका है।

अपने मैट्रिक्स कॉल

test = Array[m, {10, 10}] 

फिर अपने उप मैट्रिक्स

subTest = Nest[Delete[Transpose[#], {{1}, {2}, {8}}] &, test, 2] 

लियोनिद की विधि

subTest == test[[#, #]] &[Complement[Range[10], {1, 2, 8}]] 
(* True *) 
+0

मेरे साथ लिंडिड की विधि के समय ('100000' पुनरावृत्ति के लिए) की तुलना से पता चलता है कि उसका लगभग 2.5 गुना तेज है .... – Simon

+1

सच (+1), लेकिन लियोनिद को याद रखना और समझना आसान होगा ... –

+0

+ 1 डबल ट्रांसपोज़र से प्यार करें :) –