numpy.array에서 연속적으로 True 인 것을 찾습니다.

7141 단어 파이썬numpy
흔히 볼 수 있습니다. 모처럼 쓰고 코드를 적어 둡니다.

하고 싶은 일



numpy.array에 대해서 N회 연속해서 True의 곳만 남깁니다


방법



하나씩 벗어나서 두 번 연속하는 원점을 찾고 하나씩 뒤집어서 끝까지 True로 채웁니다.

and의 부분을 2회 하면 3개의 연속한 기점, 3회 하면 4개의 연속한 기점을 찾아낼 수 있으므로, 이것을 재기로 써 주면 임의의 횟수 연속한 부분을 찾아낼 수 있습니다.


1. 행렬 준비



파이썬
import numpy as np
arr = np.array([[True,  False, False, True,  False, False, False],
                [False, False, True,  True,  True,  True,  False],
                [False, True,  True,  False, True,  False, True ],
                [False, False, False, False, True,  True,  False],
                [True,  True,  False, False, False, False, False]])
arr

2. 연속하는 곳만 남긴다



파이썬
def is_continuous(arr, left_cnt):
    if left_cnt >= 1:
        arr2 = arr[:, :-1] & arr[:, 1:]
        arr2 = is_continuous(arr2, left_cnt - 1)
    else:
        arr2 = arr
    return arr2

def check_continuous(arr, continuous_cnt):
    arr2 = is_continuous(arr, continuous_cnt - 1)
    arr3 = np.tile(np.full(continuous_cnt - 1, False), arr2.shape[0]).reshape(-1, arr2.shape[0]).T
    arr2 = np.hstack([arr2, arr3])
    for _ in range(continuous_cnt - 1):
        arr2[:, 1:] = arr2[:, 1:] | arr2[:, :-1]
    return arr2

print(arr)
check_continuous(arr, 2)

이제 다음과 같은 출력을 얻을 수 있습니다.

좋은 웹페이지 즐겨찾기