python - 使用 nx.to_numpy_array 时邻接矩阵中的有序节点

标签 python networkx

我创建了一个带有一些边的图:

import networkx as nx

g = nx.Graph()
g.add_edge(1, 2)
g.add_edge(2, 6)
g.add_edge(3, 4)
g.add_edge(5, 6)

print(g.edges)
output-> (1, 2), (1, 5), (2, 6), (5, 6), (3, 4)
然后相邻 A通过使用图 g
nx.convert_matrix.to_numpy_array(g)
结果是:
array([[0., 1., 1., 0., 0., 0.],
       [1., 0., 0., 1., 0., 0.],
       [1., 0., 0., 1., 0., 0.],
       [0., 1., 1., 0., 0., 0.],
       [0., 0., 0., 0., 0., 1.],
       [0., 0., 0., 0., 1., 0.]])
可以看到相邻不匹配g如果您认为相邻元素的索引如下:
A :   1 2 3 4 5 6
     —————————————
  1 | 0 1 1 0 0 0
  2 | 1 0 0 1 0 0
  3 | 1 0 0 1 0 0
  4 | 0 1 1 0 0 0
  5 | 0 0 0 0 0 1
  6 | 0 0 0 0 1 0
例如:
A , 指数值 (1, 3) 等于 1 ,像往常一样,这意味着边 (1, 3) 存在,但实际上不存在!
如果我更改 A 的索引如下:
A :   1 2 5 6 3 4
     —————————————
  1 | 0 1 1 0 0 0
  2 | 1 0 0 1 0 0
  5 | 1 0 0 1 0 0
  6 | 0 1 1 0 0 0
  3 | 0 0 0 0 0 1
  4 | 0 0 0 0 1 0
比赛将在 edges 之间进行和 A .
我的问题
如何制作A的索引遵循正常顺序 -> 1,2,3,4...
先谢谢了~

最佳答案

节点出现的顺序是 to_numpy_matrix 的结果, 取决于边的插入顺序,即节点添加到图中的顺序。您可以使用 nx.to_pandas_adjacency 检查邻接矩阵的实际顺序。 :

g = nx.Graph()
g.add_edge(1, 2)
g.add_edge(2, 6)
g.add_edge(3, 4)
g.add_edge(5, 6)
g.edges()
# EdgeView([(1, 2), (2, 6), (6, 5), (3, 4)])

nx.to_pandas_adjacency(g)

     1    2    6    3    4    5
1  0.0  1.0  0.0  0.0  0.0  0.0
2  1.0  0.0  1.0  0.0  0.0  0.0
6  0.0  1.0  0.0  0.0  0.0  1.0
3  0.0  0.0  0.0  0.0  1.0  0.0
4  0.0  0.0  0.0  1.0  0.0  0.0
5  0.0  0.0  1.0  0.0  0.0  0.0

要获得具有有序节点的邻接矩阵,您可以使用 nodelist nx.to_numpy_matrix 中的参数,并为它提供一个排序的节点列表:
nx.to_numpy_matrix(g, nodelist=sorted(g.nodes()))

matrix([[0., 1., 0., 0., 0., 0.],
        [1., 0., 0., 0., 0., 1.],
        [0., 0., 0., 1., 0., 0.],
        [0., 0., 1., 0., 0., 0.],
        [0., 0., 0., 0., 0., 1.],
        [0., 1., 0., 0., 1., 0.]])

这与您通过重新索引邻接数据框中的轴得到的结果相同:
nodes_sorted = sorted(g.nodes())
nx.to_pandas_adjacency(g).reindex(index=nodes_sorted, columns=nodes_sorted)

    1    2    3    4    5    6
1  0.0  1.0  0.0  0.0  0.0  0.0
2  1.0  0.0  0.0  0.0  0.0  1.0
3  0.0  0.0  0.0  1.0  0.0  0.0
4  0.0  0.0  1.0  0.0  0.0  0.0
5  0.0  0.0  0.0  0.0  0.0  1.0
6  0.0  1.0  0.0  0.0  1.0  0.0

关于python - 使用 nx.to_numpy_array 时邻接矩阵中的有序节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62427114/

相关文章:

python - 在 BeautifulSoup 中用另一种标签替换一种标签

python - 如何从 react-js 执行 python 脚本?

python - Networkx 自定义不起作用

python - 从 numpy 数组创建图形顶点

python - 访问 networkx 节点和属性

python - 是否有一个 groupby 函数可以创建一个从名称到下划线的新数据框?

python - 用 Beautiful Soup 提取 href

python - 部署了 rest-framework 的 django 时出错

python - 如何比较 Networkx 中的有向图?

python - 使用 NetworkX 绘制彩色树