在 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