I am playing with the cifar-10 dataset (available here) and for now I would like to plot one of the images of a batch.
The images are represented as vectors when I get them from pickle:
From the cifar-10 documentation:
The first 1024 entries (of an image) contain the red channel values, the next 1024 the green, and the final 1024 the blue. The image is stored in row-major order, so that the first 32 entries of the array are the red channel values of the first row of the image.
What I came up with to plot an image is this:
import numpy as np import matplotlib.pyplot as plt # get the dataset a = unpickle('./cifar-10/data_batch_1') # get the first image img = np.array(a[b'data']) # transform it to a 3 x 1024 array, one row per color channel # and transpose it to a 1024 x 3 array, one row per rgb pixel img = img.reshape(3, 1024).T # reshape it so we can plot it as a 32 x 32 image with 3 color channels img = img.reshape(32, 32, 3) # plot plt.imshow(img) plt.show()
It's my first attempt at matrix manipulation so even if this is concise, I feel like it could be simpler. What do you guys think?