【问题标题】:Connected components from an adjacency matrix using Numpy or Scipy使用 Numpy 或 Scipy 从邻接矩阵连接组件
【发布时间】:2019-12-16 21:44:46
【问题描述】:

我有以下邻接矩阵:

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

可以这样画:

我的目标是识别连通图 ABC 和 DEFG。似乎 深度优先搜索 算法是我需要的,而 Scipy implemented it。所以这是我的代码:

from scipy.sparse import csr_matrix
from scipy.sparse.csgraph import depth_first_order
import numpy as np

test = np.asarray([
    [0, 1, 1, 0, 0, 0, 0],
    [1, 0, 1, 0, 0, 0, 0],
    [1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 1, 0, 1],
    [0, 0, 0, 1, 0, 1, 0],
    [0, 0, 0, 0, 1, 0, 1],
    [0, 0, 0, 1, 0, 1, 0]
])

graph = csr_matrix(test)
result = depth_first_order(graph, 0)

但我没有得到结果:

>>> result
(array([0, 1, 2]), array([-9999,     0,     1, -9999, -9999, -9999, -9999]))

array([-9999, 0, 1, -9999, -9999, -9999, -9999]) 是什么?此外,在文档中,他们谈论的是稀疏矩阵而不是邻接矩阵。但是根据定义,邻接矩阵似乎是一个稀疏矩阵,所以我不清楚。

【问题讨论】:

    标签: python numpy graph scipy


    【解决方案1】:

    虽然您确实可以使用 DFS 来查找连接的组件,但 SciPy 使用 scipy.sparse.csgraph.connected_components 使其变得更加容易。用你的例子:

    In [3]: connected_components(test)                                                              
    Out[3]: (2, array([0, 0, 0, 1, 1, 1, 1], dtype=int32))
    

    【讨论】:

    • 我想添加一个看起来很明显的细节。 array([0, 0, 0, 1, 1, 1, 1] 只是索引连接的组件: 0 表示 ABC 1 表示 DEFG 。在你回答之前我发现这个函数时我错过了,可能是因为我的邻接矩阵中只有两个图。
    • 这些标签的意义何在?我看不出如何从标签中检索连接节点的索引。还是有更大的目的?
    • @JaswantP:稍微改一下 snoobdogg 已经说过的话,标签表示组件并由(有序)顶点索引。也就是说,前三个顶点(a,b,c)属于一个分量(0),而其他四个顶点(d,e,f,g)属于另一个分量(1)。
    【解决方案2】:

    首先,您有一个无向图。再次查看文档并将directed参数设置为false,因为默认为True。

    您获得的第一个数组是从您开始的地方(节点 0 = 节点 a)可到达的节点,包括您的起始节点。 所以你从节点 a 开始,你可以到达 b 和 c。由于您有一个断开连接的图表,您无法到达图表的其余部分。 DFS 正在做它应该做的事情。您需要在 d 节点上进行 DFS 以获得第二个图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-13
      • 2013-11-11
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 2020-04-14
      • 2015-06-21
      • 2023-02-07
      相关资源
      最近更新 更多