Вы можете найти первый элемент True логического массива, используя argmax
.
a = np.array([False, False, True, True, True])
first_True = a.argmax()
last_True = len(a) - 1 - a[::-1].argmax()
. Вы можете использовать argmin
, чтобы найти значения False, и это будет быстрее и займет меньше памяти, чемиспользуя ненулевое значение, но это линейно по длине a
.Если вы хотите быть быстрее линейного, вы должны знать, что a
«отсортировано», для логического массива, который означает, что у вас есть блок False, за которым следует все True.В этом случае вы можете использовать сортировку поиска, чтобы найти границу между ложным и истинным:
first_True = a.searchsorted(True, 'left')