То, что вы ищете, это «связанные компоненты» в массиве.У Сципи есть удобная функция label
для этого:
import numpy as np
from scipy.ndimage.measurements import label
a = np.array([
[1, 2, 4, 5, 8, 9, 7],
[4, 0, 0, 7, 5, 6, 8],
[6, 5, 0, 4, 3, 5, 2],
[1, 0, 0, 5, 7, 0, 6],
[2, 3, 5, 7, 8, 9, 4],])
labs, n_components = label(a==0)
component_sizes = [np.sum(labs==i) for i in range(1, n_components+1)]
print(component_sizes)
Отпечатки [5, 1]