如何用预先指定的值替换矩阵中的 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
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