Numpy에서 array의 index자리에 array를 넣는 과정이 이해가 안됩니다. (예> 3d_array[2d_array])

조회수 719회

numpy를 이용한 이미지 프로세싱 과정 중에 코드에서 이해가 안되는 부분이 있어서 질문을 올립니다.

import numpy as np
image = np.array([[[1,1,1],[1,1,1]],[[1,1,1],[1,1,1]]])
b = np.array([[True,True],[True,False]])

image[b] = [0,0,0]

이와 같은 코드인데요. image는 2*2의 해상도를 가지는 이미지에 RGB값이 1,1,1로 들어간 데이터입니다. b는 2*2차원 배열에 True, False값이 들어있는거구요.

질문1> image에 [b]를 넣는다는것이 어떤 의미인지 이해가 잘 안됩니다. image[0,0,0]을 넣는건 알겠는데 배열을 넣는건 모르겠네요.

질문2> image[b] = [0,0,0]을 넣으면 결과가 이렇게 나오는데 이게 왜 이런걸까요?

array([[[0, 0, 0],
        [0, 0, 0]],

       [[0, 0, 0],
        [1, 1, 1]]])

1 답변

  • 좋아요

    2

    싫어요
    채택 취소하기

    numpy의 advanced indexing을 말하시는 것 같네요.

    파이썬과는 다르게 numpy의 array는 sequence object(단, 튜플 제외)로 index 할 수 있습니다. 이걸 advanced indexing이라고 말합니다.

    advanced indexing에는 integer array indexing와 boolean arrary indexing이 있는데, 질문에 나온 건 boolean array indexing이네요.

    numpy 공식문서 - Boolean array indexing 에는 다음과 같이 적혀있고요.

    If obj.ndim == x.ndim, x[obj] returns a 1-dimensional array filled with the elements of x corresponding to the True values of obj. .. (이하 생략)

    간략히 해석하면

    obj.ndim == x.ndim 이면 x[obj]는 1차원 obj에 True 값과 매칭 되는 x의 원소를 가져온다고 합니다. 다음 코드를 실행해보면 좀 더 감을 잡으실 것 같네요.

    import numpy as np
    image = np.array([[[1,1,1],[1,1,1]],[[1,1,1],[1,1,1]]])
    
    b = np.array([[True,True],[True,False]])
    print(image[b])
    
    b = np.array([[True,True],[True,True]])
    print(image[b])
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)