본문 바로가기
파이썬

파이썬 조건이 충족되면 Numpy 요소 교체

by º기록 2021. 1. 2.
반응형

조건이 충족되면 각 요소가 1 또는 0으로 변경되도록 조작해야하는 큰 numpy 배열이 있습니다 (나중에 픽셀 마스크로 사용됨). 배열에는 약 8 백만 개의 요소가 있으며 현재 방법은 축소 파이프 라인에 너무 오래 걸립니다.

for (y,x), value in numpy.ndenumerate(mask_data): 

    if mask_data[y,x]<3: #Good Pixel
        mask_data[y,x]=1
    elif mask_data[y,x]>3: #Bad Pixel
        mask_data[y,x]=0

속도를 높일 수있는 numpy 함수가 있습니까?

 

해결 방법

 

>>> import numpy as np
>>> a = np.random.randint(0, 5, size=(5, 4))
>>> a
array([[4, 2, 1, 1],
       [3, 0, 1, 2],
       [2, 0, 1, 1],
       [4, 0, 2, 3],
       [0, 0, 0, 2]])
>>> b = a < 3
>>> b
array([[False,  True,  True,  True],
       [False,  True,  True,  True],
       [ True,  True,  True,  True],
       [False,  True,  True, False],
       [ True,  True,  True,  True]], dtype=bool)
>>> 
>>> c = b.astype(int)
>>> c
array([[0, 1, 1, 1],
       [0, 1, 1, 1],
       [1, 1, 1, 1],
       [0, 1, 1, 0],
       [1, 1, 1, 1]])

다음과 같이 단축 할 수 있습니다.

>>> c = (a < 3).astype(int)

 

참조 페이지 https://stackoverflow.com/questions/19766757

 

 

반응형

댓글