R を使用して行列 L から対角要素 (diagL) を削除するにはどうすればよいですか? 私は以下を使用してみました:
subset(L, select=-diag(L)) or
subset(L, select=-c(diag(L)))
しかし、私は0の数字を取得します...
説明のための人工データを次に示します。
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