10

R を使用して行列 L から対角要素 (diagL) を削除するにはどうすればよいですか? 私は以下を使用してみました:

subset(L, select=-diag(L)) or
subset(L, select=-c(diag(L)))

しかし、私は0の数字を取得します...

4

4 に答える 4

8

説明のための人工データを次に示します。

x <- matrix(1:16, 4, 4)
n <- nrow(x)
x
      [,1] [,2] [,3] [,4]
 [1,]    1    5    9   13
 [2,]    2    6   10   14
 [3,]    3    7   11   15
 [4,]    4    8   12   16

行列 をベクトル化した後x、対角要素はインデックス1, n+2, 2*n+3, ...、つまりシーケンス に対応しますseq(1, n^2, n+1)。これらのインデックスを削除するには、

x[-seq(1,n^2,n+1)]
[1]  2  3  4  5  7  8  9 10 12 13 14 15

行列の「対角線を削除」した後、下三角行列を上にシフトして、n-1行とn列を持つ行列を取得できます。

matrix(x[-seq(1,n^2,n+1)], n-1, n)
     [,1] [,2] [,3] [,4]
[1,]    2    5    9   13
[2,]    3    7   10   14
[3,]    4    8   12   15

または、これはおそらくあなたが望むものです。対角インデックスを削除する前に転置し、後で転置することにより、下三角行列を右にシフトして、n行とn-1列を含む行列を取得できます。x

t(matrix(t(x)[-seq(1,n^2,n+1)], n-1, n))
     [,1] [,2] [,3]
[1,]    5    9   13
[2,]    2   10   14
[3,]    3    7   15
[4,]    4    8   12
于 2014-08-11T16:29:40.290 に答える