Выпуклая оболочка заданного значения внутри массива - python 2.7 - PullRequest
0 голосов
/ 06 июня 2018

Для данного массива (как предложено ниже) и заданного значения (здесь, 0) я хотел бы подсчитать, сколько 0 может быть связано в одном выпуклом корпусе.

массив:

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

Для предложенного массива решение должно получить: [5, 1], поскольку первый «шаблон» из пяти 0 может быть идентифицирован между второй и четвертой строкой и вторым / третьим столбцами.Существует второй шаблон только с одним 0.

У вас есть идеи о том, как это получить?Я знаю, как посчитать число 0. Может быть, я могу что-то сделать с опцией маски массива numpy?

С уважением и благодарностью за вашу помощь,

1 Ответ

0 голосов
/ 06 июня 2018

То, что вы ищете, это «связанные компоненты» в массиве.У Сципи есть удобная функция 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]

...