Определить «плоские» области на гистограмме? - PullRequest
2 голосов
/ 04 октября 2019

Я пытаюсь найти «плоские» области в гистограмме - на самом деле это просто 1-мерный массив. Когда я говорю «плоский», я имею в виду, где линия близка к нулю (<25) для длительных периодов. Пример гистограммы, с которой я работаю: </p>

0, 5, 9, 2, 8, 112, 12, 1, 20, 331  # my_array 

Поэтому я хочу идентифицировать индексы как группы. Так что в приведенном выше примере у меня будет 2 группы / кортежи: (0,1,2,3,4), (6,7,8). Можете ли вы предложить, как я мог бы сделать это эффективно?

Мой первый шаг - просто использовать np.where(my_array < 25). Это дает мне массив, подобный этому (True, True, True, True, True, False, True, True, True, False). Как я могу затем преобразовать это в groups / tuples / np.arrays в numpy?

1 Ответ

0 голосов
/ 04 октября 2019

argwhere - ваш друг, чтобы получить показатели, по которым выполняется условие. Затем мы группируем их с consecutive_groups:

import more_itertools as mit

condition = my_array < 25
[tuple(group) for group in mit.consecutive_groups(np.argwhere(condition).flatten())]

Результат:

[(0, 1, 2, 3, 4), (6, 7, 8)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...