8

Mathematica で両方の行列を削除しようとしています。それを行うための洗練されていない方法は、以下で行うことです。つまり、新しいマトリックスで次のように指定します。

S = Table[
    Ss[[If[i < t, i, i + 1]]][[If[j < t, j, j + 1]]], {i, q}, {j, q}];  

ここでの目標は、行と列 t を削除することです。

確かに、行を削除するのは簡単です Delete[Ss,t]. 列の列については、私ができると思います

Transpose[Delete[Transpose[Ss,t]]]  

私の主な関心事は、可能な限り最速の方法で実行することです。

より一般的に言えば、転置に頼らずに行列の列を行に対して行うのと同じくらい簡単にスライス アンド ダイスする Mathematica 演算子はありますか?

4

1 に答える 1

14

私はあなたが探していると思います:

Drop[Ss,{t},{t}]  

タイミング:

ClearAll["Global`*"];

First@Timing[a = RandomInteger[1000, {5000, 5000}];]
0.34

First@Timing[Drop[a, {2}, {2}]]
0.11

その間

First@Timing[Transpose@Delete[Transpose@Delete[a, 2], 2]]
0.5
于 2011-03-13T14:42:43.117 に答える