我将写一个例子来阐明我的意思:
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,我必须写matrix2,因为它是我在边列表中写入的第三个节点。有人知道我该怎么解决这个问题吗?
发布于 2019-06-05 02:52:27
如果你事先知道你的节点,那么你可以在添加边之前将它们添加到图中。例如,
>>> 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.]]
https://stackoverflow.com/questions/56449518
复制相似问题