При просмотре массива 3D numpy, представляющего трехмерное пространство, два индекса массива A и B «связаны», если существует путь от A до B, где Path - это список индексов массива, где каждая соседняя пара элементов Path [i] и Path [i + 1] являются (1) индексами ненулевых элементов во входном массиве и (2) «рядом» друг с другом, np.max (np.abs (Path [i] - Path) [i + 1])) <= 1. </p>
Учитывая начальный индекс A, я хотел бы сгенерировать список A_Connected, который является списком всех индексов массива, которые «связаны» с A.
Мой медленный метод будет:
def find_connected_list(array, index, connected_list):
connected_list.append(index)
for x in range(index[0]-1, index[0]+2):
for y in range(index[1]-1, index[1]+2):
for z in range(index[2]-1, index[2]+2):
if x>= 0 and x < array.shape[0] and y >= 0 and y < array.shape[1] and z >= 0 and z < array.shape[2] and array[x,y,z] > 0 and not [x,y,z] in connected_list:
connected_list = find_connected_list(array, [x,y,z], connected_list)
return connected_list