【发布时间】: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 数据帧视为“邻接”矩阵,而不是直接的以我为例的图形表示。
【问题讨论】: