在 R 中创建一个特殊的对角矩阵
Create a special diagonal matrix in R
我有一个数字向量如下。
c <- c(5, 4.5, 4, 3.5, 3, 2.5, 2, 1.5, 1, 0.5, 0, 0)
有没有一种高效的方法可以创建矩阵或 data.table 如下所示?想过做一个循环,但是因为真实数据集很大,所以需要很长时间。
5 4.5 4 3.5 3 2.5 2 1.5 1 0.5 0 0
0 5 4.5 4 3.5 3 2.5 2 1.5 1 0.5 0
0 0 5 4.5 4 3.5 3 2.5 2 1.5 1 0.5
0 0 0 5 4.5 4 3.5 3 2.5 2 1.5 1
0 0 0 0 5 4.5 4 3.5 3 2.5 2 1.5
0 0 0 0 0 5 4.5 4 3.5 3 2.5 2
0 0 0 0 0 0 5 4.5 4 3.5 3 2.5
0 0 0 0 0 0 0 5 4.5 4 3.5 3
0 0 0 0 0 0 0 0 5 4.5 4 3.5
0 0 0 0 0 0 0 0 0 5 4.5 4
0 0 0 0 0 0 0 0 0 0 5 4.5
0 0 0 0 0 0 0 0 0 0 0 5
如有任何想法,我们将不胜感激!
我们可以使用toeplitz
out <- toeplitz(c)
out[lower.tri(out)] <- 0
-输出
> out
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,] 5 4.5 4.0 3.5 3.0 2.5 2.0 1.5 1.0 0.5 0.0 0.0
[2,] 0 5.0 4.5 4.0 3.5 3.0 2.5 2.0 1.5 1.0 0.5 0.0
[3,] 0 0.0 5.0 4.5 4.0 3.5 3.0 2.5 2.0 1.5 1.0 0.5
[4,] 0 0.0 0.0 5.0 4.5 4.0 3.5 3.0 2.5 2.0 1.5 1.0
[5,] 0 0.0 0.0 0.0 5.0 4.5 4.0 3.5 3.0 2.5 2.0 1.5
[6,] 0 0.0 0.0 0.0 0.0 5.0 4.5 4.0 3.5 3.0 2.5 2.0
[7,] 0 0.0 0.0 0.0 0.0 0.0 5.0 4.5 4.0 3.5 3.0 2.5
[8,] 0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 4.5 4.0 3.5 3.0
[9,] 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 4.5 4.0 3.5
[10,] 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 4.5 4.0
[11,] 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 4.5
[12,] 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0
我有一个数字向量如下。
c <- c(5, 4.5, 4, 3.5, 3, 2.5, 2, 1.5, 1, 0.5, 0, 0)
有没有一种高效的方法可以创建矩阵或 data.table 如下所示?想过做一个循环,但是因为真实数据集很大,所以需要很长时间。
5 4.5 4 3.5 3 2.5 2 1.5 1 0.5 0 0
0 5 4.5 4 3.5 3 2.5 2 1.5 1 0.5 0
0 0 5 4.5 4 3.5 3 2.5 2 1.5 1 0.5
0 0 0 5 4.5 4 3.5 3 2.5 2 1.5 1
0 0 0 0 5 4.5 4 3.5 3 2.5 2 1.5
0 0 0 0 0 5 4.5 4 3.5 3 2.5 2
0 0 0 0 0 0 5 4.5 4 3.5 3 2.5
0 0 0 0 0 0 0 5 4.5 4 3.5 3
0 0 0 0 0 0 0 0 5 4.5 4 3.5
0 0 0 0 0 0 0 0 0 5 4.5 4
0 0 0 0 0 0 0 0 0 0 5 4.5
0 0 0 0 0 0 0 0 0 0 0 5
如有任何想法,我们将不胜感激!
我们可以使用toeplitz
out <- toeplitz(c)
out[lower.tri(out)] <- 0
-输出
> out
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,] 5 4.5 4.0 3.5 3.0 2.5 2.0 1.5 1.0 0.5 0.0 0.0
[2,] 0 5.0 4.5 4.0 3.5 3.0 2.5 2.0 1.5 1.0 0.5 0.0
[3,] 0 0.0 5.0 4.5 4.0 3.5 3.0 2.5 2.0 1.5 1.0 0.5
[4,] 0 0.0 0.0 5.0 4.5 4.0 3.5 3.0 2.5 2.0 1.5 1.0
[5,] 0 0.0 0.0 0.0 5.0 4.5 4.0 3.5 3.0 2.5 2.0 1.5
[6,] 0 0.0 0.0 0.0 0.0 5.0 4.5 4.0 3.5 3.0 2.5 2.0
[7,] 0 0.0 0.0 0.0 0.0 0.0 5.0 4.5 4.0 3.5 3.0 2.5
[8,] 0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 4.5 4.0 3.5 3.0
[9,] 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 4.5 4.0 3.5
[10,] 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 4.5 4.0
[11,] 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0 4.5
[12,] 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0