在R矩阵中的对角线上方插入数字

itj*_*s18 6 r diagonal

我在R中有这样的矢量:

vec1 <- c(14000,12000,8000)
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个矩阵,其中14000是我的主对角线,1200是一个在对角线上方,8000个在对角线上方.

我熟悉在Python/numpy中这样做,但无法在R中找出它(或者至少是一种有效的方法).理想情况下,输出看起来像这样:

14000 12000  8000
    0 14000 12000
    0     0 14000
Run Code Online (Sandbox Code Playgroud)

akr*_*run 6

尝试

m1 <- t(matrix(vec1, nrow=5, ncol=3))[,1:3]
m1[lower.tri(m1)] <- 0
m1
#     [,1]  [,2]  [,3]
#[1,] 14000 12000  8000
#[2,]     0 14000 12000
#[3,]     0     0 14000
Run Code Online (Sandbox Code Playgroud)

或使用 toeplitz

toeplitz(vec1)*upper.tri(diag(seq_along(vec1)), diag=TRUE)
#      [,1]  [,2]  [,3]
#[1,] 14000 12000  8000
#[2,]     0 14000 12000
#[3,]     0     0 14000
Run Code Online (Sandbox Code Playgroud)

或@David Arenburg建议的修改

m <- toeplitz(vec1)
m[lower.tri(m)] <- 0
Run Code Online (Sandbox Code Playgroud)