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

Adr*_*ian 4 r matrix

mat <- diag(3)
> mat
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    0
[3,]    0    0    1
Run Code Online (Sandbox Code Playgroud)

我有一个矩阵,对角线上为 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
Run Code Online (Sandbox Code Playgroud)

有什么快速方法可以做到这一点?

G. *_*eck 7

试试这个总和

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
Run Code Online (Sandbox Code Playgroud)

其变体是将其写为以下 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
Run Code Online (Sandbox Code Playgroud)


Tar*_*Jae 6

我们可以创建一个布尔向量来指示0并将其分配给每个元素TRUE

mat[mat == 0] <- 0.3
Run Code Online (Sandbox Code Playgroud)
     [,1] [,2] [,3]
[1,]  1.0  0.3  0.3
[2,]  0.3  1.0  0.3
[3,]  0.3  0.3  1.0
Run Code Online (Sandbox Code Playgroud)

G.Grothendieck2 在速度方面领先:-) 在此输入图像描述