code: def show_images(images, titles=None, cols=5, **kwargs):
      
      # The images param can be a list or an array
  
      titles = titles or [""] * len(images)
      rows = math.ceil(len(images) / cols)
      height_ratio = 1.2 * (rows/cols) * (0.5 if type(images[0]) is not np.ndarray else 1)
      plt.figure(figsize=(11, 11 * height_ratio))
      i = 1
      for image, title in zip(images, titles):
          plt.subplot(rows, cols, i)
          plt.axis("off")
          # Is image a list? If so, merge them into one image.
          if type(image) is not np.ndarray:
              image = [norm(g) for g in image]
              image = np.concatenate(image, axis=1)
          else:
              image = norm(image)
          plt.title(title, fontsize=9)
          plt.imshow(image, cmap="Greys_r", **kwargs)
          i += 1
      plt.tight_layout(h_pad=0, w_pad=0)
docs: images: A list of images. I can be either:
          - A list of Numpy arrays. Each array represents an image.
          - A list of lists of Numpy arrays. In this case, the images in
            the inner lists are concatentated to make one image.