Python NetworkX 从关联矩阵创建图形

标签 python networkx

我有一个关联矩阵(其中行是节点,列是边)如下(它是从文本文件读入 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/

相关文章:

python - 如何在 TensorFlow 中将信号与一维内核进行卷积?

python - 如何绘制 networkx 图的节点子集

python - 贝尔曼福特负重量 - Networkx

python - 如何在粗线上获得非圆形箭头?

python - 如何成功地要求用户在两个选项之间进行选择

python - 如何将自定义装饰器添加到FastAPI路由?

python - 更改 Python 直方图 bin 中的计数

python - Django/South 在 python manage.py schemamigration testapp --initial 上设置失败

python - 从带有行和列标题的 csv 文件中读取 networkx 图

python - NetworkX 获取应用权重的节点的度数