R 矩阵用一填充零行
我有一个邻接矩阵A:R 矩阵用一填充零行,r,matrix,linear-algebra,R,Matrix,Linear Algebra,我有一个邻接矩阵A: [1] [2] [3] [1] 1 0 1 [2] 0 0 0 [3] 0 0 0 我想要一个新的矩阵B,所有行中只有一个矩阵B,所以B: [1] [2] [3] [1] 0 0 0 [2] 1 1 1 [3] 1 1 1 我怎样才能做到这一点呢?apply()在这里很有用。试一试 t(apply(A, 1, function(x){ifelse(x != sum(x), 0, 1)})) 另
[1] [2] [3]
[1] 1 0 1
[2] 0 0 0
[3] 0 0 0
我想要一个新的矩阵B,所有行中只有一个矩阵B,所以B:
[1] [2] [3]
[1] 0 0 0
[2] 1 1 1
[3] 1 1 1
我怎样才能做到这一点呢?apply()
在这里很有用。试一试
t(apply(A, 1, function(x){ifelse(x != sum(x), 0, 1)}))
另一种方式
m <- matrix( c(1, 0, 1, 0, 0, 0, 0, 0, 0), nrow = 3, byrow = T )
> m
[,1] [,2] [,3]
[1,] 1 0 1
[2,] 0 0 0
[3,] 0 0 0
m <- matrix(rep(ifelse(rowSums(m) == 0, 1, 0), dim(m)[1]), nrow = dim(m)[1])
> m
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 1 1 1
[3,] 1 1 1
m
[,1] [,2] [,3]
[1,] 1 0 1
[2,] 0 0 0
[3,] 0 0 0
m m
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 1 1 1
[3,] 1 1 1
由于邻接矩阵是非负的,所以您可以只测试零行和:
A <- matrix(c(1, 0, 1,
0, 0, 0,
0, 0, 0), byrow = TRUE, nrow = 3)
B <- A * 0 # 0-matrix same dimensions as A
B[rowSums(A) == 0, ] <- 1
A显示的apply
返回一个向量,该向量每行A
返回一个元素,如果该行全为零,则该向量的值为TRUE,否则返回FALSE。使用循环将该向量分配给A
,使A的每一列都充满该向量。这样的赋值还具有将FALSE和TRUE转换为0和1的效果。这个表达式很紧凑,看起来比较容易理解,并且不使用任何包
replace(A, TRUE, apply(A == 0, 1, all))
给予:
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 1 1 1
[3,] 1 1 1
这种变化甚至更短,但有点棘手:
replace(A, TRUE, apply(!A, 1, all))
注
可复制形式的输入A
:
A <- matrix(c(1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L), 3)
A您应该指定将矩阵更改为所需格式的规则。请尝试i1我喜欢x!=求和(x)部分!