R igraph 手册页

如果您从 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 开始,这可以是由 Matrix 包创建的稀疏矩阵。

模式

字符标量,指定 igraph 应该如何解释提供的矩阵。 另请参阅 weighted 参数,解释也取决于该参数。 可能的值有:directedundirectedupperlowermaxminplus。 请参见下面的详细信息。

weighted

此参数指定是否从邻接矩阵创建加权图。 如果它是 NULL,则创建一个未加权的图,并且邻接矩阵的元素给出顶点之间的边数。 如果它是一个字符常量,则为每个非零矩阵条目创建一个边,并将该条目的值作为由 weighted 参数命名的边属性添加。 如果它是 TRUE,则创建一个加权图,并且边属性的名称将是 weight。 另请参阅下面的详细信息。

diag

逻辑标量,是否在计算中包括矩阵的对角线。 如果这是 FALSE,则首先将对角线清零。

add.colnames

字符标量,是否将列名添加为顶点属性。 如果它是 ‘NULL’(默认值),则如果存在,则列名将作为顶点属性 ‘name’ 添加。 如果为 ‘NA’,则不会添加它们。 如果是字符常量,则给出要添加的顶点属性的名称。

add.rownames

字符标量,是否将行名添加为顶点属性。 可能的值与前一个参数相同。 默认情况下,不添加行名。 如果 ‘add.rownames’ 和 ‘add.colnames’ 指定相同的顶点属性,则前者将被忽略。

...

传递给 graph_from_adjacency_matrix

详细信息

顶点的顺序被保留,即对应于第一行的顶点将是图中的顶点 0,依此类推。

graph_from_adjacency_matrix 在两种主要模式下运行,具体取决于 weighted 参数。

如果此参数为 NULL,则创建一个未加权的图,并且邻接矩阵的元素给出要在两个对应顶点之间创建的边数。 详细信息取决于 mode 参数的值

"directed"

该图将是有向的,并且矩阵元素给出两个顶点之间的边数。

"undirected"

为了方便起见,这与 max 完全相同。 请注意,检查矩阵是否对称。

"max"

将创建一个无向图,并且 max(A(i,j), A(j,i)) 给出边数。

"upper"

将创建一个无向图,只有右上三角形(包括对角线)用于边数。

"lower"

将创建一个无向图,只有左下三角形(包括对角线)用于创建边。

"min"

将创建一个无向图,顶点 ij 之间具有 min(A(i,j), A(j,i)) 个边。

"plus"

将创建一个无向图,顶点 ij 之间具有 A(i,j)+A(j,i) 个边。

如果 weighted 参数不是 NULL,则矩阵的元素给出边的权重(如果它们不为零)。 详细信息取决于 mode 参数的值

"directed"

该图将是有向的,并且矩阵元素给出边权重。

"undirected"

首先,我们检查矩阵是否对称。 如果不是,则会出错。 然后,只有上三角形用于创建加权的无向图。

"max"

将创建一个无向图,并且 max(A(i,j), A(j,i)) 给出边权重。

"upper"

将创建一个无向图,只有右上三角形(包括对角线)用于(边权重)。

"lower"

将创建一个无向图,只有左下三角形(包括对角线)用于创建边。

"min"

将创建一个无向图,min(A(i,j), A(j,i)) 给出边权重。

"plus"

将创建一个无向图,A(i,j)+A(j,i) 给出边权重。

一个 igraph 图对象。

作者

Gabor Csardi csardi.gabor@gmail.com

参见

graphgraph_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)


[包 igraph 版本 1.3.5 索引]