python在具有三个元素的3D图形/元组中找到连接的组件?

hir*_*hme 6 python graph connected-components

我有一个二进制3D numpy数组,我想为其寻找连接的组件,即ID值为1的邻居元素。

data = np.random.binomial(1, 0.4, 1000)
data = data.reshape((10,10,10))
Run Code Online (Sandbox Code Playgroud)

或者,我可以获取值为1的每个元素的坐标,并获取包含三个元素的一组列表,以获取相邻的簇

coordinates = np.argwhere(data > 0)

connected_elements = []
for node in coordinates:
  neighbors = #Get possible neighbors of node
  if neighbors not in connected_elements:
    connected_elements.append(node)
  else:
    connected_elements.index(neighbor).extend(node)
Run Code Online (Sandbox Code Playgroud)

如何执行此操作,或为3D设置实现2D connected_components函数?

X. *_*. W 0

认为:

  1. 您正在谈论(i, j, k)3D 图中节点的 6 个可能的邻居,并且“邻居”是指邻居与节点之间的距离为 1;和

  2. “有效的连通分量”意味着nodeA和nodeB是邻居并且两个值都是1。

然后我们可以用这样的函数来获取可能的邻居:

def get_neighbors(data, i, j, k):
    neighbors = []
    candidates = [(i-1, j, k), (i, j-1, k), (i, j, k-1), (i, j, k+1), (i, j+1, k), (i+1, j, k)]
    for candidate in candidates:
        try:
            if data[candidate] == 1:
                neighbors.append(candidate)
        except IndexError:
            pass
    return neighbors
Run Code Online (Sandbox Code Playgroud)