Ya se indicó que la lectura de los rásteres en la memoria estaría bien, he aquí un ejemplo simple de cómo puede obtener su promedio con gdal y numpy. Supongo que todos los que aquí su tiff son del mismo tamaño (filas, columnas), son solo bandas, comparten el mismo CRS, y usted no necesita escribir la calculada imagen de disco.
import gdal
import numpy as np
def write_raster(raster_array, gt, data_obj, outputpath, dtype=gdal.GDT_UInt16, options=0, color_table=0, nbands=1, nodata=False):
height, width = raster_array.shape
driver = gdal.GetDriverByName("GTiff")
if options != 0:
dest = driver.Create(outputpath, width, height, nbands, dtype, options)
else:
dest = driver.Create(outputpath, width, height, nbands, dtype)
if color_table != 0:
dest.GetRasterBand(1).SetColorTable(color_table)
dest.GetRasterBand(1).WriteArray(raster_array)
if nodata is not False:
dest.GetRasterBand(1).SetNoDataValue(nodata)
dest.SetGeoTransform(gt)
wkt = data_obj.GetProjection()
srs = osr.SpatialReference()
srs.ImportFromWkt(wkt)
dest.SetProjection(srs.ExportToWkt())
dest = None
tifflist = ['something1.tif', 'something2.tif']
for i, tiff in enumerate(tifflist):
gd_obj = gdal.Open(tiff)
array = gd_obj.ReadAsArray()
array = np.expand_dims(array,2)
if i == 0:
allarrays = array
else:
allarrays = np.concatenate((allarrays, array), axis=2)
mean_of_tiffs = np.nanmean(allarrays, axis=2)
outputpath = 'wherever you are saving this guy.tif'
write_raster(mean_of_tiffs, gd_obj.GetGeoTransform(), gd_obj, outputpath)