繁体   English   中英

Python NetworkX从关联矩阵创建图形

[英]Python NetworkX creating graph from incidence matrix

我有一个关联矩阵(其中行是节点,列是边),如下所示(从文本文件读取到NumPy数组):

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

我想从这个矩阵使用NetworkX创建一个图表,但是找不到如何做到这一点。 NetworkX from_numpy_matrix仅适用于邻接矩阵。 以下是如何使用NetworkX创建关联矩阵的一个很好的示例(但这不是我的情况,因为我已经开始使用关联矩阵)。 我也试过这个 ,但得到了令人讨厌的错误:

File "C:\Python27\lib\site-packages\networkx\convert.py", line 150, in to_networkx_graph
    "Input is not a correct numpy matrix or array.")
networkx.exception.NetworkXError: Input is not a correct numpy matrix or array.

看起来一个简单的问题,但也许不是。 任何人都可以帮助我吗?

提前致谢!

Networkx有一个方便的nx.from_numpy_matrix函数采用邻接矩阵,所以一旦我们将关联矩阵转换为邻接矩阵,我们就很好了。

假设我们从关联矩阵开始

im = np.array([[0, 1, 1], [0, 1, 1], [0, 0, 0]])

要将其转换为邻接矩阵,首先让我们看看哪些节点是连接的:

am = (np.dot(im, im.T) > 0).astype(int)

这里我们只是检查两个节点之间是否至少有一条边。

如果要删除自循环,可以调用

np.fill_diagonal(am, 0)

现在,让我们看看am

>>> am
array([[0, 1, 0],
       [1, 0, 0],
       [0, 0, 0]])

要创建图表,现在我们可以调用

networkx.from_numpy_matrix(am)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM