본문 바로가기
머신러닝을 위한 파이썬 기초/matplotlib

파이썬 for문 이용하여 여러 그래프 한 화면에 그리기 (MNIST)

by bigpicture 2023. 11. 2.
반응형

MNIST 데이터는 손글씨 데이터입니다. train 데이터만 60000장입니다. 이중 원하는 개수를 for 문을 이용하여 화면분할 그래프를 그리는 방법입니다. 코드는 아래와 같습니다. 

 

#필요한 패키지들 불러오기
from torchvision.datasets import MNIST
from torchvision.transforms import ToTensor
import matplotlib.pyplot as plt

#MNIST 데이터 불러오기
training_data=MNIST(root="./",train=True,download=True,transform=ToTensor())
test_data=MNIST(root="./",train=False,download=True,transform=ToTensor())

#그리고 싶은 이미지 개수 설정
num_image=12
#화면 분할 행 수
num_row=4
#화면 분할 열 수
num_col=3

#fig 와 axs 생성
fig, axs = plt.subplots(num_row, num_col, figsize=(2*num_col, 2*num_row))

for i in range(num_image) :
    
    ax=axs[i//num_col , i%num_col]
    ax.imshow(training_data[i][0][0], cmap='gray')
    ax.set_title('Original')
    ax.axis('off')

plt.show()

 

아래 코드만 자세히 설명하겠습니다. 오늘 사용한 for문의 핵심입니다. 

ax=axs[i//num_col , i%num_col]

i//num_col 은 axs의 행의 자리에 들어가 있습니다. //은 나눗셈의 정수부분입니다. i에는 0부터 11까지의 숫자가 들어갑니다. num_col 은 3이므로 각 결과는 아래와 같습니다. 

0//3 = 0
1//3 = 0
2//3 = 0
3//3 = 1
4//3 = 1
5//3 = 1
6//3 = 2
7//3 = 2
8//3 = 2
9//3 = 3
10//3 = 4
11//3 = 4

결과를 보면 3이라는 열의 수를 넘어가면 숫자가 하나씩 커집니다. 열이 차면 행이 저절로 하나씩 커지는 코드가 된 것입니다. 

이번에는 i%num_col 을 봅시다. axs의 열의 자리에 들어가 있습니다. %s는 나머지 연산입니다. 각 결과는 아래와 같습니다. 

0%3 = 0
1%3 = 1
2%3 = 2
3%3 = 0
4%3 = 1
5%3 = 2
6%3 = 0
7%3 = 1
8%3 = 2
9%3 = 0
10%3 = 1
11%3 = 2

0,1,2 라는 열이 반복되는 구조입니다.ㅣ 

반응형

댓글