如何按参数对节点排序?

时间:2019-06-04 18:35:03

标签: python networkx

我将写一个例子来阐明我的意思:

test = nx.Graph()
test.add_edge(0,3)
test.add_edge(1,2)
test.nodes 
Out: NodeView((0, 3, 1, 2))
nx.to_numpy_matrix(test)
Out: matrix([[0., 1., 0., 0.],
            [1., 0., 0., 0.],
            [0., 0., 0., 1.],
            [0., 0., 1., 0.]])

因此,如果您查看上面的示例,则可以看到networkx按照将节点添加到图中的顺序对节点进行排序。

问题是我需要按照给节点的编号对邻接矩阵进行排序。因此,对于我的示例,最终矩阵必须为:

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

此外,我正在从边缘列表文件中读取图形。

最后,我的实际问题是输出矩阵的索引与图中的索引不同。因此,对于我的示例,如果我要检查矩阵中的节点1,则必须写入matrix [2],因为它是我在边缘列表中写入的第三个节点。 有人知道我该怎么解决吗?

1 个答案:

答案 0 :(得分:1)

如果您事先知道节点,则可以在添加边之前将其添加到图形中。例如,

>>> G = nx.Graph()
>>> G.add_node(0)
>>> G.add_node(1)
>>> G.add_node(2)
>>> G.add_node(3)
>>> G.add_edge(0,3)
>>> G.add_edge(1,2)
>>> G.nodes
NodeView((0, 1, 2, 3))
>>> nx.to_numpy_matrix(G)
matrix([[0., 0., 0., 1.],
        [0., 0., 1., 0.],
        [0., 1., 0., 0.],
        [1., 0., 0., 0.]])

或者,查看API文档,您可以轻松完成

print(nx.to_numpy_matrix(test, nodelist=[0,1,2,3]))

输出:

[[0. 0. 0. 1.]
 [0. 0. 1. 0.]
 [0. 1. 0. 0.]
 [1. 0. 0. 0.]]