这个问题在某种程度上延续了我在这里提出的问题:在Mathematica中删除矩阵列的简单方法是 @belisarius和@Daniel提供了非常有用的答案.
我通常要做的是从矩阵中提取特定的行和列,或者在删除指定的内容后剩下的内容.所以这可以正式写成,找到TakeOperator和Drop运算符,这样:
TakeOperator [A,{i1,..,ip},{j1,...,jq}] =(A [[ik]] [[jl]])(1 <= k <= p,1 <= 1 <= q)=Table[A[[ik]][[jl]],{k,p},{l,q}]
我们注意到Ic = {i'1,...,i'p'} = Complement[{1,...,Length[A]},{i1,...,ip}]; Jc = {j'1,... ,j'q'} = Complement[{1,...,Length[A]},{j1,...,jq}];
DropOperator [A,{i1,..,ip},{j1,...,jq}] =(A [[ik]] [[jl]])(1 <= k'<= p',1 < = l'<= q')=Table[A[[ik']][[jl']],{k',p'},{l','q}]
虽然Table如上所述,但以这种方式使用Table是非常低效的.
为了给出一个想法,我拿了@ belisarius的例子:
In: First@Timing[a = RandomInteger[1000, {5000, 5000}];]
Out:0.218
In:Clear[b,c]
In:First@Timing[
b = Table[
If[i < 100, If[j < 100, a[[i]][[j]], a[[i]][[j + 1]]],
If[j < 100, a[[i + …Run Code Online (Sandbox Code Playgroud) 给定:方形矩阵和表示要删除的行的索引的列表,它还同时表示要删除的列的索引(它是方形矩阵,因此只需要一个列表).
输出:方形矩阵,删除列表中的行和列列.
假设有效的索引列表.
这是一个例子

所以上面说的是删除第二行和第四行,以及第二和第四列.
我Delete[]无法想象如何使用同时删除行和列,我真的不想列出我想删除的每个单独的元素索引.
但我可以Delete用来删除行.
下面我解决了它,我首先删除了行,然后转换了矩阵,然后删除了新矩阵的行(这将是原始列的行),然后将结果转换回来获得我想要的.
像这样:
a = {{0, 5, 2, 3, 1, 0}, {4, 3, 2, 5, 1, 3}, {4, 1, 3, 5, 3, 2}, {4,
4, 1, 1, 1, 5}, {3, 4, 4, 5, 3, 3}, {5, 1, 4, 5, 2, 0}};
del = {{2}, {4}};
a = Delete[a, del];
a = Delete[Transpose[a], del];
(a = Transpose[a]) // MatrixForm
Run Code Online (Sandbox Code Playgroud)
我的问题:是否有更短的方式使用Delete(或其他一个专家技巧)以更好的方式做到这一点?
谢谢