파이썬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,:,:]
내용을 복사해 집어 넣는 것입니다.
댓글 입력