通过在 R 中覆盖具有相同输出尺寸的相同大小的布尔掩码来过滤矩阵
Filter Matrix by overlaying boolean mask of same size with same output dimensions in R
给定这个 5x5 邻接矩阵:
library(matrixcalc)
set.seed(1)
matrix(runif(25, 0, 10), nrow=5, ncol=5) %>% upper.triangle
得到这个矩阵:
[,1] [,2] [,3] [,4] [,5]
[1,] 2.655087 8.983897 2.059746 4.976992 9.347052
[2,] 0.000000 9.446753 1.765568 7.176185 2.121425
[3,] 0.000000 0.000000 6.870228 9.919061 6.516738
[4,] 0.000000 0.000000 0.000000 3.800352 1.255551
[5,] 0.000000 0.000000 0.000000 0.000000 2.672207
我想在保持大小的同时过滤此布尔过滤器掩码中所有为真的条目,用 NA 或 0 填充假条目。
mask <- matrix(rep(FALSE, 25), nrow=5, ncol=5)
mask[1,2] <- TRUE
mask[2,3] <- TRUE
mask[1,5] <- TRUE
mask[3,5] <- TRUE
生成此掩码:
[,1] [,2] [,3] [,4] [,5]
[1,] FALSE TRUE FALSE FALSE TRUE
[2,] FALSE FALSE TRUE FALSE FALSE
[3,] FALSE FALSE FALSE FALSE TRUE
[4,] FALSE FALSE FALSE FALSE FALSE
[5,] FALSE FALSE FALSE FALSE FALSE
输出经过mask过滤后大小相同的矩阵:
[,1] [,2] [,3] [,4] [,5]
[1,] 0 8.983897 0.000000 0 9.347052
[2,] 0 0.000000 1.765568 0 0.000000
[3,] 0 0.000000 0.000000 0 6.516738
[4,] 0 0.000000 0.000000 0 0.000000
[5,] 0 0.000000 0.000000 0 0.000000
如果你的矩阵被称为 mat
你可以这样做:
mat[!mask] <- 0
我们可以使用replace
replace(mat, !mask, 0)
给定这个 5x5 邻接矩阵:
library(matrixcalc)
set.seed(1)
matrix(runif(25, 0, 10), nrow=5, ncol=5) %>% upper.triangle
得到这个矩阵:
[,1] [,2] [,3] [,4] [,5]
[1,] 2.655087 8.983897 2.059746 4.976992 9.347052
[2,] 0.000000 9.446753 1.765568 7.176185 2.121425
[3,] 0.000000 0.000000 6.870228 9.919061 6.516738
[4,] 0.000000 0.000000 0.000000 3.800352 1.255551
[5,] 0.000000 0.000000 0.000000 0.000000 2.672207
我想在保持大小的同时过滤此布尔过滤器掩码中所有为真的条目,用 NA 或 0 填充假条目。
mask <- matrix(rep(FALSE, 25), nrow=5, ncol=5)
mask[1,2] <- TRUE
mask[2,3] <- TRUE
mask[1,5] <- TRUE
mask[3,5] <- TRUE
生成此掩码:
[,1] [,2] [,3] [,4] [,5]
[1,] FALSE TRUE FALSE FALSE TRUE
[2,] FALSE FALSE TRUE FALSE FALSE
[3,] FALSE FALSE FALSE FALSE TRUE
[4,] FALSE FALSE FALSE FALSE FALSE
[5,] FALSE FALSE FALSE FALSE FALSE
输出经过mask过滤后大小相同的矩阵:
[,1] [,2] [,3] [,4] [,5]
[1,] 0 8.983897 0.000000 0 9.347052
[2,] 0 0.000000 1.765568 0 0.000000
[3,] 0 0.000000 0.000000 0 6.516738
[4,] 0 0.000000 0.000000 0 0.000000
[5,] 0 0.000000 0.000000 0 0.000000
如果你的矩阵被称为 mat
你可以这样做:
mat[!mask] <- 0
我们可以使用replace
replace(mat, !mask, 0)