這個問題在某種程度上延續了我在此處詢問的問題:Simple way to delete a matrix column in Mathematica @belisarius和@Daniel提供了非常有用的答案。在Mathematica中選擇/刪除矩陣中行/列的清單的有效方法
我一般要做的是從矩陣中提取特定的行和列,或者在指定的元素被刪除後保留下來。因此,這可以正式寫成:找到TakeOperator和Drop Operator如下:
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]])(= k'< = p ',< = 1'< = q')= Table[A[[ik']][[jl']],{k',p'},{l','q}]
儘管如上所述的Table
這樣做,但以這種方式使用表是非常低效的。
只給一個想法,我把@貝利薩留例如:
In: [email protected][a = RandomInteger[1000, {5000, 5000}];]
Out:0.218
In:Clear[b,c]
In:[email protected][
b = Table[
If[i < 100, If[j < 100, a[[i]][[j]], a[[i]][[j + 1]]],
If[j < 100, a[[i + 1]][[j]], a[[i + 1]][[j + 1]]]], {i,
4999}, {j, 4999}]]
Out:140.807
In:[email protected][c = Drop[a, {100}, {100}]]
Out:0.093
In:c===b
Out:True
注:對於在早期的崗位使用Drop
,我想過用它作爲很好,但是當我檢查文件,沒有建議按照@belisarius和@daniel的建議來完成它。如果在將來的版本中文檔可以按照這個方向進行更新,那將會很有幫助。
您應該檢查**更多信息**在幫助部分。那裏有一些有用的信息。在** Drop **幫助條目中,您只會找到{n} \t元素n:D – 2011-03-14 16:50:45
@belisarius:是的。剛剛看到它。感覺在迷宮中迷失了一點,不過......謝謝。 – Phil 2011-03-14 20:12:57
那種感覺很正常。學習瀏覽幫助系統需要時間,功能清單是_huge_ – 2011-03-14 20:27:41