【问题标题】:Make graph from mask grid in Python在 Python 中从掩码网格制作图形
【发布时间】:2021-04-26 01:05:32
【问题描述】:

我有一个带有 1 和 0 的“掩码”numpy 2D 数组,例如

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

我的任务是将这个矩阵转换为一个连接图,其中零作为节点与其直接邻居连接,也就是说,例如,在这种情况下,该图将包含多个图(彼此不连接),例如:

*         *---*
|
*---*            *
|                |
*                *
etc...

所以基本上这里的每个零都是一个节点,边是到其他零的路径,这些零是它们的直接邻居(在顶部、底部、右侧或左侧)。 边缘的方向很重要!边缘是垂直的或水平的,就像在输入矩阵中一样。我的最终目标是使用生成的图表/图表集合来执行一些测试:

  • 所有节点的连通性
  • 边的最大和最小长度(在每个方向上)

我发现了优秀的 networkx 库,它似乎能够从数组生成图形,但 reference 表示它只能将 nd-arrays 或 pandas 数据帧视为“邻接”矩阵,而不是直接的以我为例的图形表示。

【问题讨论】:

    标签: python numpy matrix graph


    【解决方案1】:

    您可以通过查找所有零的索引并计算它们之间的距离,将您的图形表示转换为邻接矩阵表示。转换后,您可以将图形传递给 networkx 的函数。 下面是一个实现这个想法并在数组的一小部分上使用它的代码示例:

    【讨论】:

      猜你喜欢
      • 2021-03-06
      • 2016-03-19
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多