代码之家  ›  专栏  ›  技术社区  ›  Vadym B.

将R中的矩阵转换为被次对角线除的上/下三角矩阵

  •  -1
  • Vadym B.  · 技术社区  · 10 年前

    我知道这一点。tri()和更低。tri()我可以得到上下三角矩阵除以主对角线。

    但是,用次对角线除三角矩阵的最快方法是什么?

    2 回复  |  直到 10 年前
        1
  •  1
  •   A. Webb    10 年前

    只需修改代码 lower.tri ,例如。

    lower.anti.tri<-function(m) col(m)+row(m) > dim(m)[1]+1
    
    m<-matrix(1:16,4)
    lower.anti.tri(m)
    
          [,1]  [,2]  [,3]  [,4]
    [1,] FALSE FALSE FALSE FALSE
    [2,] FALSE FALSE FALSE  TRUE
    [3,] FALSE FALSE  TRUE  TRUE
    [4,] FALSE  TRUE  TRUE  TRUE
    
    m[lower.anti.tri(m)]<-NA
    m
    
         [,1] [,2] [,3] [,4]
    [1,]    1    5    9   13
    [2,]    2    6   10   NA
    [3,]    3    7   NA   NA
    [4,]    4   NA   NA   NA
    
        2
  •  0
  •   mattdevlin    10 年前

    您可以使用 apply(mat, 1, rev) 水平翻转矩阵 lower.tri() :

    m <- matrix(1:16,4)
    m[apply(lower.tri(m), 1, rev)] <- 0
    
    m
    #     [,1] [,2] [,3] [,4]
    #[1,]    1    5    9   13
    #[2,]    2    6   10    0
    #[3,]    3    7    0    0
    #[4,]    4    0    0    0