У меня есть двумерный двоичный файл numpy
arrays
разного размера, который содержит определенные шаблоны. Именно так:
import numpy
a = numpy.zeros((6,6), dtype=numpy.int)
a[1,2] = a[1,3] = 1
a[4,4] = a[5,4] = a[4,3] = 1
Здесь «изображение» содержит два фрагмента: один с 2, а другой с 3 соединенными ячейками.
print a
array([[0, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 1, 0],
[0, 0, 0, 0, 1, 0]])
Я хочу знать, как часто ненулевая ячейка граничит с другой ненулевой ячейкой ( соседи определяются как ладья, то есть ячейки слева, справа, ниже и выше каждой ячейки), включая их псевдорепликация (и наоборот).
Предыдущий подход для внутренних границ возвращает неправильные значения (5), поскольку он был предназначен для вычисления внешние границы.
numpy.abs(numpy.diff(a, axis=1)).sum()
Таким образом, для приведенного выше тестового массива правильный общий результат будет 6 (верхний патч имеет две внутренние границы, нижний четыре).
Благодарен за любые советы!
РЕДАКТИРОВАТЬ:
Ошибка: Нижний явно имеет 4 внутренних ребра (соседние ячейки с одинаковым значением)
Объяснил желаемое соседство немного больше