我有一个关联矩阵(其中行是节点,列是边)如下(它是从文本文件读入 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仅适用于邻接矩阵。 Here是如何使用 NetworkX 创建关联矩阵的一个很好的示例(但这不是我的情况,因为我已经有一个关联矩阵开始了)。我也试过this ,但得到了讨厌的错误:
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
function采用邻接矩阵,所以一旦我们将关联矩阵转换为邻接矩阵,我们就很好了。
假设我们从关联矩阵开始
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)
关于Python NetworkX 从关联矩阵创建图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39511179/