파이썬3 넘파이 행렬 인덱스 조작 관련 질문

조회수 687회
    num = generated_images.shape[0] # 생성된 이미지의 개수
    width = int(math.sqrt(num))
    height = int(math.ceil(float(num)/width))
    shape = generated_images.shape[2:]
    image = np.zeros((height * shape[0], width * shape[1]), 
                      dtype = generated_images.dtype)

    for index, img in enumerate(generated_images):
        i = int(index / width)
        j = index % width
        image[i*shape[0]:{i+1} * shape[0], 
             j * shape[1]:(j+1)*shape[1]] = img[0,:,:]

위는 제가 보고 있는 예제인데요, 맨 마지막 줄의 image[i*shape[0]:{i+1} * shape[0], j * shape[1]:(j+1)*shape[1]] = img[0,:,:] 이 부분이 이해가 안 가요. 저게 무슨 뜻인지 설명 부탁드리겠습니다.

1 답변

  • 구체적인 숫자를 넣어서 이해하면 대략 이해가 갑니다.

    num = 4                      # 전체 이미지 갯수
    width = 2 ( sqrt(4) )        # 이미지 x축으로 몇개
    height = 2                   # 이미ㅈ y축으로 몇개
    shape = 5, 5                 # 라고 합시다.
    image = np.zeros(2*5, 2*5)   # 작은 이미지를 (2x2) 로 
                                 # 합친 큰 이미지
    
    #
    #  ._________._________.
    #  |         |         |
    #  |  (0, 0) | (0, 1)  |
    #  |         |         |
    #  |_________|_________|
    #  |         |         |
    #  |  (1, 0) | (1, 1)  |
    #  |         |         |
    #  |_________|_________|
    #
    #
    

    for 문이 돌면서, for 문 안의 i, j 는 (0, 0), (0, 1), (1, 0), (1, 1) 이 됩니다. 이 인덱스는 위 그림에서 처럼 전체 이미지의 각 부분에 4개의 이미지를 복사하는 작업을 하기 위한 것입니다.

    image[i*shape[0]:{i+1} * shape[0], j * shape[1]:(j+1)*shape[1]] 는 커다란 이미지의 (i, j) 번 이미지 부분의 배열이고, 이곳에 img[0,:,:] 내용을 복사해 집어 넣는 것입니다.

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

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

(ಠ_ಠ)
(ಠ‿ಠ)