Matrix 如何用矩阵的一些非连续行和列形成子矩阵

Matrix 如何用矩阵的一些非连续行和列形成子矩阵,matrix,wolfram-mathematica,Matrix,Wolfram Mathematica,我有一个10乘10的矩阵。我想从这个主矩阵中形成一个子矩阵,使用除第一、第二和第八列之外的所有行和列。 我知道Part可用于形成子矩阵,但示例主要是关于仅使用连续行和列形成子矩阵。如果这是您的矩阵: tst = RandomInteger[10, {10, 10}]; 这将为手头的案例带来好处: tst[[{3, 4, 5, 6, 7, 9, 10}, {3, 4, 5, 6, 7, 9, 10}]] 您可以使用补码[Range[10],{1,2,8}]来代替显式列表 给你的矩阵打电话 te

我有一个10乘10的矩阵。我想从这个主矩阵中形成一个子矩阵,使用除第一、第二和第八列之外的所有行和列。

我知道Part可用于形成子矩阵,但示例主要是关于仅使用连续行和列形成子矩阵。

如果这是您的矩阵:

tst = RandomInteger[10, {10, 10}];
这将为手头的案例带来好处:

tst[[{3, 4, 5, 6, 7, 9, 10}, {3, 4, 5, 6, 7, 9, 10}]]
您可以使用
补码[Range[10],{1,2,8}]
来代替显式列表

给你的矩阵打电话

test = Array[m, {10, 10}]
那么你的子矩阵是

subTest = Nest[Delete[Transpose[#], {{1}, {2}, {8}}] &, test, 2]
与Leonid方法比较

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

将Leondie的方法与我的方法的计时(100000次重复)进行比较表明,他的方法大约快2.5倍。…@belisarius:在这方面,当你在Mathematica中转置矩阵时,它会用转置的元素创建一个新对象,还是仅仅将旧对象标记为转置(就像matlab或NumPy那样)?西蒙一个天真的实验似乎告诉我们它复制了记忆usage@belisarius:我相信你的结果,这让我天真吗?@belisarius我很好奇;您是否在
%
%
等中找到了实用程序,但为了节省内存而放弃了这些实用程序,或者您对它们没有任何用处?Sreya,欢迎使用StackOverflow!别忘了为下面你喜欢的答案投票,如果其中一个答案让你满意,请用答案旁边的复选标记接受。您可以随时更改您的选择。有关可能感兴趣的密切相关SO问题,请参阅。花环描述了两个非常有用的函数,
takeOperator
dropOperater
,我想这两个函数也能满足您的要求。看见