본문 바로가기
ERROR

ValueError: cannot reshape array of size 1 into shape (28,28)

by ram_ 2023. 1. 15.
import matplotlib.pyplot as plt

plt.figure(figsize=(10,8))

for idx, n in enumerate(samples):   
    plt.subplot(4, 4, idx+1)        
    plt.imshow(X_train[n].reshape(28,28), cmap='Greys') 
    plt.title(y_train[n])

plt.show()

mnist 데이터를 사용하고, random하게 16개를 뽑아서 그림을 그려보는 도중 위 코드에서 발생한 에러이다.

random으로 뽑아낸 samples 데이터를 보면 숫자가 한줄로 나열되어있어서, 그림을 그릴 수 없기에 reshape(28,28)로 잡아주었는데, train 데이터를 보면 맨 앞에 label column이 있는데 X_train 지정시에 해당 칼럼을 빼고 할당하지 않은 점이 문제였다 .

사이즈가 안맞으니 reshape 되지 않았던 것이다. 

(train data set의 총 칼럼은 785개. label 빼고 28*28 = 784개)

df_train.iloc[:, 1:]으로 첫번째 칼럼 label을 뺀 나머지를 지정해준다. 다시 코드를 실행하니 정상 작동 되었다.