如何获得导出子图的对称邻接矩阵?
How can you obtain a symmetric adjacency matrix of an induced subgraph?
4个顶点的完整图用边表表示如下:
$ cat k4.edgelist
0 1
0 2
0 3
1 2
1 3
2 3
现在,考虑以下使用 python-igraph 的 Python 脚本:
from igraph import Graph
g=Graph.Full(4)
n=g.induced_subgraph(g.neighbors(0))
print n.get_adjacency().data
h=Graph.Read_Edgelist('k4.edgelist')
n=h.induced_subgraph(h.neighbors(0))
print n.get_adjacency().data
执行的输出是:
[[0, 1, 1], [1, 0, 1], [1, 1, 0]]
[[0, 1, 1], [0, 0, 1], [0, 0, 0]]
我很困惑,因为我希望第二行与第一行相同。 documentation for get_adjacency() 有一个参数 type
默认设置为 GET_ADJACENCY_BOTH
,因此矩阵确实应该是对称的。
有没有直接的方法可以得到导出子图的对称邻接矩阵?我当然可以通过线性代数做到这一点,但我关心的矩阵很大,所以我想尽可能高效地做到这一点。
你制作了一个有向图。做一个无向的:
h=Graph.Read_Edgelist('k4.edgelist', directed=False)
4个顶点的完整图用边表表示如下:
$ cat k4.edgelist
0 1
0 2
0 3
1 2
1 3
2 3
现在,考虑以下使用 python-igraph 的 Python 脚本:
from igraph import Graph
g=Graph.Full(4)
n=g.induced_subgraph(g.neighbors(0))
print n.get_adjacency().data
h=Graph.Read_Edgelist('k4.edgelist')
n=h.induced_subgraph(h.neighbors(0))
print n.get_adjacency().data
执行的输出是:
[[0, 1, 1], [1, 0, 1], [1, 1, 0]]
[[0, 1, 1], [0, 0, 1], [0, 0, 0]]
我很困惑,因为我希望第二行与第一行相同。 documentation for get_adjacency() 有一个参数 type
默认设置为 GET_ADJACENCY_BOTH
,因此矩阵确实应该是对称的。
有没有直接的方法可以得到导出子图的对称邻接矩阵?我当然可以通过线性代数做到这一点,但我关心的矩阵很大,所以我想尽可能高效地做到这一点。
你制作了一个有向图。做一个无向的:
h=Graph.Read_Edgelist('k4.edgelist', directed=False)