我有一个邻接矩阵A:
[1] [2] [3]
[1] 1 0 1
[2] 0 0 0
[3] 0 0 0
我想要一个新的矩阵B,其中所有行中只有一个,只有零,所以B:
[1] [2] [3]
[1] 0 0 0
[2] 1 1 1
[3] 1 1 1
我怎么能这样做?R
答案 0 :(得分:3)
由于邻接矩阵是非负的,你可以只测试零rowSums
:
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
答案 1 :(得分:2)
t(apply(A, 1, function(x){ifelse(x != sum(x), 0, 1)}))
在这里很有用。尝试
@property
def title_str(self) -> str:
return self._title_str
@title_str.setter
def title_str(self, i_new_title: str):
self._title_str = i_new_title
self._update(db.Schema.PhrasesTable.Cols.title, i_new_title)
答案 2 :(得分:1)
显示的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)
答案 3 :(得分:0)
另一种方式
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