代码之家  ›  专栏  ›  技术社区  ›  Adrian

如何用预先指定的值替换矩阵中的0

  •  2
  • Adrian  · 技术社区  · 4 年前
    mat <- diag(3)
    > mat
         [,1] [,2] [,3]
    [1,]    1    0    0
    [2,]    0    1    0
    [3,]    0    0    1
    

    我有一个矩阵,沿对角线方向为1,其他地方为0。我想用0.3替换0,所以矩阵看起来像

    > mat
         [,1] [,2] [,3]
    [1,]    1  0.3  0.3
    [2,]  0.3    1  0.3
    [3,]  0.3  0.3    1
    

    3 回复  |  直到 4 年前
        1
  •  5
  •   TarJae    4 年前

    0 并将每个元素分配给它 TRUE

    mat[mat == 0] <- 0.3
    
         [,1] [,2] [,3]
    [1,]  1.0  0.3  0.3
    [2,]  0.3  1.0  0.3
    [3,]  0.3  0.3  1.0
    

    G.Grothendieck2在速度方面领先:-) enter image description here

        2
  •  5
  •   G. Grothendieck    4 年前

    mat + 0.3 * (1 - mat)
    ##      [,1] [,2] [,3]
    ## [1,]  1.0  0.3  0.3
    ## [2,]  0.3  1.0  0.3
    ## [3,]  0.3  0.3  1.0
    

    它的一个变体是将其写成以下mat和1的凸组合。

    0.7 * mat + 0.3
    ##      [,1] [,2] [,3]
    ## [1,]  1.0  0.3  0.3
    ## [2,]  0.3  1.0  0.3
    ## [3,]  0.3  0.3  1.0
    
        3
  •  4
  •   akrun    4 年前

    使用 replace

    replace(mat, !mat, 0.3)
    

    或者也可以

    (!mat) * 0.3 + mat
      [,1] [,2] [,3]
    [1,]  1.0  0.3  0.3
    [2,]  0.3  1.0  0.3
    [3,]  0.3  0.3  1.0