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)
有什么快速方法可以做到这一点?
试试这个总和
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)
我们可以创建一个布尔向量来指示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)