En este escenario tenemos un array de imágenes que queremos mostrar en una matriz. Para ello recurrimos a la función plt.subplots, extraemos los ejes creados y asociamos cada imagen a un eje.
Comenzamos cargando los paths de las imágenes:
image_paths = glob("C:/Mis Imagenes/*jpg") # Cargamos los paths de las imágenes
A continuación cargamos las imágenes en el array images, convirtiéndolas (opcionalmente) en blanco y negro y redimensionándolas:
file_size = 256
def ImportImage(filename):
    img = Image.open(filename).convert("LA").resize((file_size, file_size))
    return np.array(img)[:,:,0]
images = np.array([ImportImage(img) for img in image_paths])
Por último definimos la función que crea los subplots:
def plotImages(images, nrows = 4, ncolumns = 4):
    fig, axes = plt.subplots(nrows, ncolumns, figsize = (ncolumns * 3, nrows * 3))
    axes = axes.flatten() # Listado plano de ejes
    for img, ax in zip(images, axes):
        ax.imshow(img, cmap="Greys_r") # Mostramos las imágenes en blanco y negro
        ax.set_xticks(()) # Elimina los xticks
        ax.set_yticks(()) # Elimina los yticks
    plt.tight_layout() # Disposición estrecha
plotImages(images, 2, 3)
El resultado es el siguiente:
