Я хочу объединить определенные значения, которые численно близки.
В этом примере я постараюсь объединить все, что может быть подключено через соседнее значение с разницей меньше 2
import numpy as np
a = np.arange(10)
a = np.delete(a, (3, 7))
matrix = np.abs(a.reshape(-1,1) - a)
matrix < 2
array([[ True, True, False, False, False, False, False, False],
[ True, True, True, False, False, False, False, False],
[False, True, True, False, False, False, False, False],
[False, False, False, True, True, False, False, False],
[False, False, False, True, True, True, False, False],
[False, False, False, False, True, True, False, False],
[False, False, False, False, False, False, True, True],
[False, False, False, False, False, False, True, True]])
Начиная с верхнего левого угла:
- Сначала переместите горизонтально, чтобы найти последнее истинное значение.
- Затем go вниз, чтобы найти последнее истинное значение.
- Повторяйте оба, пока квадрат не будет найден.
- Невозможно соединить истинные значения по диагонали.
Это даст вам первый квадрат, который идет от [0,2] до [2 , 2].
Желаемый результат этого примера будет:
[[0, 2], [3, 5], [6, 7]]
Где значения указывают начало и конец квадрата. Есть ли хороший способ сделать это?
Я бы предпочел не l oop, если возможно.