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

How to replace 0s in a matrix with a pre-specified value

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

执行此操作的快速方法是什么?

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

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

试试这个总和

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