【问题标题】:How to replace 0s in a matrix with a pre-specified value如何用预先指定的值替换矩阵中的 0
【发布时间】:2021-12-27 18:51:46
【问题描述】:
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

有什么快速的方法?

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    试试这个总和

    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
    

    【讨论】:

      【解决方案2】:

      我们可以创建一个指示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 在速度方面领先 :-)

      【讨论】:

        【解决方案3】:

        使用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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-15
          • 1970-01-01
          • 2014-11-29
          • 1970-01-01
          • 2020-12-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多