2011-06-06 91 views
5

我有一個10×10的矩陣。我想從這個主矩陣中形成一個子矩陣,使用除第1,第2和第8列和行之外的所有行和列。
我知道Part可以用來形成子矩陣,但是這些例子主要是關於僅使用連續的行和列來形成子矩陣的。如何用矩陣的某些非連續行和列形成子矩陣

+0

Sreya,歡迎比較!不要忘記爲自己喜歡的下面的答案投票,如果其中一人回答您的問題以滿意,請使用答案旁邊的複選標記接受答案。只要你喜歡,你可以改變你的選擇。 – 2011-06-06 22:36:19

+2

請參閱[這裏](http://stackoverflow.com/q/5299798/499167)瞭解一個密切相關的SO問題,這可能是有趣的。 WReach已經描述了兩個非常有用的功能,「takeOperator」和「dropOperater」,它們也會按照你的要求做,我想。見[這裏](http://stackoverflow.com/questions/5299798/efficient-way-to-pick-delete-a-list-of-rows-columns-in-a-matrix-in-mathematica/5300892#5300892 ) – tomd 2011-06-07 06:07:10

回答

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] 

與獅子座的StackOverflow上方法

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

比較Leondid方法與我的方法(對於'100000'重複)的時間表明他的速度大約快了2.5倍.... – Simon 2011-06-06 22:14:38

+1

真(+1),但是獅子座的會更容易記住和理解... – 2011-06-06 22:25:18

+0

+ 1 Love the double Transpose :) – 2011-06-06 22:35:22