Кластеризуйте соседние ячейки в матрице, если выполнено условие (Python)

#numpy #hierarchical-clustering

Вопрос:

У меня есть 2d-матрица, в которой в каждой ячейке хранится некоторое значение, указывающее высоту над землей. Я хочу сформировать группы соседних ячеек (включая диагональные ячейки, т. Е. Каждая не граничная ячейка имеет 8 соседей), учитывая, что эти ячейки соответствуют некоторым условиям (например, разница Кроме того, ячейки со значением 0 будут игнорироваться.

Требуемым выводом является словарь с ключами в виде серийных номеров, а значениями являются индексы строк и столбцов всех ячеек, принадлежащих к этой группе.

Например:

 import numpy as np  mat = np.asarray([[0, 1, 0, 0, 0, 0, 0],  [1, 1, 2, 2, 0, 0, 0],  [0, 0, 2, 0, 0, 0, 0],  [0, 0, 2, 0, 0, 20, 20],  [1, 0, 0, 0, 0, 20, 20]])  

Требуемая производительность:

‘0’ : [0,1],[1,0],[1,1],[1,2],[1,3],[2,2],[2,3]

‘1’ : [4,0]

‘2’ : [3,5],[3,6],[4,5],[4,6]

Спасибо!