如果您从 R 中使用 igraph,请使用此选项
graph_from_adjacency_matrix {igraph} | R 文档 |
graph_from_adjacency_matrix
是一个灵活的函数,用于从邻接矩阵创建 igraph
图。
graph_from_adjacency_matrix(
adjmatrix,
mode = c("directed", "undirected", "max", "min", "upper", "lower", "plus"),
weighted = NULL,
diag = TRUE,
add.colnames = NULL,
add.rownames = NA
)
from_adjacency(...)
adjmatrix |
一个方形邻接矩阵。 从 igraph 版本 0.5.1 开始,这可以是由 |
模式 |
字符标量,指定 igraph 应该如何解释提供的矩阵。 另请参阅 |
weighted |
此参数指定是否从邻接矩阵创建加权图。 如果它是 |
diag |
逻辑标量,是否在计算中包括矩阵的对角线。 如果这是 |
add.colnames |
字符标量,是否将列名添加为顶点属性。 如果它是 ‘ |
add.rownames |
字符标量,是否将行名添加为顶点属性。 可能的值与前一个参数相同。 默认情况下,不添加行名。 如果 ‘ |
... |
传递给 |
顶点的顺序被保留,即对应于第一行的顶点将是图中的顶点 0,依此类推。
graph_from_adjacency_matrix
在两种主要模式下运行,具体取决于 weighted
参数。
如果此参数为 NULL
,则创建一个未加权的图,并且邻接矩阵的元素给出要在两个对应顶点之间创建的边数。 详细信息取决于 mode
参数的值
该图将是有向的,并且矩阵元素给出两个顶点之间的边数。
为了方便起见,这与 max
完全相同。 请注意,不检查矩阵是否对称。
将创建一个无向图,并且 max(A(i,j), A(j,i))
给出边数。
将创建一个无向图,只有右上三角形(包括对角线)用于边数。
将创建一个无向图,只有左下三角形(包括对角线)用于创建边。
将创建一个无向图,顶点 i
和 j
之间具有 min(A(i,j), A(j,i))
个边。
将创建一个无向图,顶点 i
和 j
之间具有 A(i,j)+A(j,i)
个边。
如果 weighted
参数不是 NULL
,则矩阵的元素给出边的权重(如果它们不为零)。 详细信息取决于 mode
参数的值
该图将是有向的,并且矩阵元素给出边权重。
首先,我们检查矩阵是否对称。 如果不是,则会出错。 然后,只有上三角形用于创建加权的无向图。
将创建一个无向图,并且 max(A(i,j), A(j,i))
给出边权重。
将创建一个无向图,只有右上三角形(包括对角线)用于(边权重)。
将创建一个无向图,只有左下三角形(包括对角线)用于创建边。
将创建一个无向图,min(A(i,j), A(j,i))
给出边权重。
将创建一个无向图,A(i,j)+A(j,i)
给出边权重。
一个 igraph 图对象。
Gabor Csardi csardi.gabor@gmail.com
graph 和 graph_from_literal
用于创建图的其他方法。
adjm <- matrix(sample(0:1, 100, replace=TRUE, prob=c(0.9,0.1)), ncol=10)
g1 <- graph_from_adjacency_matrix( adjm )
adjm <- matrix(sample(0:5, 100, replace=TRUE,
prob=c(0.9,0.02,0.02,0.02,0.02,0.02)), ncol=10)
g2 <- graph_from_adjacency_matrix(adjm, weighted=TRUE)
E(g2)$weight
## various modes for weighted graphs, with some tests
nzs <- function(x) sort(x [x!=0])
adjm <- matrix(runif(100), 10)
adjm[ adjm<0.5 ] <- 0
g3 <- graph_from_adjacency_matrix((adjm + t(adjm))/2, weighted=TRUE,
mode="undirected")
g4 <- graph_from_adjacency_matrix(adjm, weighted=TRUE, mode="max")
all(nzs(pmax(adjm, t(adjm))[upper.tri(adjm)]) == sort(E(g4)$weight))
g5 <- graph_from_adjacency_matrix(adjm, weighted=TRUE, mode="min")
all(nzs(pmin(adjm, t(adjm))[upper.tri(adjm)]) == sort(E(g5)$weight))
g6 <- graph_from_adjacency_matrix(adjm, weighted=TRUE, mode="upper")
all(nzs(adjm[upper.tri(adjm)]) == sort(E(g6)$weight))
g7 <- graph_from_adjacency_matrix(adjm, weighted=TRUE, mode="lower")
all(nzs(adjm[lower.tri(adjm)]) == sort(E(g7)$weight))
g8 <- graph_from_adjacency_matrix(adjm, weighted=TRUE, mode="plus")
d2 <- function(x) { diag(x) <- diag(x)/2; x }
all(nzs((d2(adjm+t(adjm)))[lower.tri(adjm)]) == sort(E(g8)$weight))
g9 <- graph_from_adjacency_matrix(adjm, weighted=TRUE, mode="plus", diag=FALSE)
d0 <- function(x) { diag(x) <- 0 }
all(nzs((d0(adjm+t(adjm)))[lower.tri(adjm)]) == sort(E(g9)$weight))
## row/column names
rownames(adjm) <- sample(letters, nrow(adjm))
colnames(adjm) <- seq(ncol(adjm))
g10 <- graph_from_adjacency_matrix(adjm, weighted=TRUE, add.rownames="code")
summary(g10)