Yep that will do nicely, code becomes

import sys, os, glob
import numpy as np

def averageEightDays(files, numrows, numcols, year, doy):
        """ Read in 8 files at a time, sum the valid LST, keep a count of 
                the valid pixels and average the result every 8days. """
        
        nodatavalue =  -999.0
        
        # break the files up into chunks of 8
        filenames = glob.glob(os.path.join(path, files))
        filenames.sort()
        filenamesList = [filenames[n:n+8] for n in xrange(0, len(filenames), 8)]
        for fchunk in filenamesList:
                # fill with nodata values, in case there are less than 8 days
                data8days = np.ones((8, numrows, numcols), dtype=np.float32) * 
-999.0 
                avg8days = np.zeros((numrows, numcols), dtype=np.float32)
                for day in xrange(len(fchunk)):
                        fname = fchunk[day]
                        try:
                                f = open(fname, 'rb')
                        except IOError:
                                print "Cannot open outfile for read", fname
                                sys.exit(1)
                        data8days[day] = np.fromfile(f, 
dtype=np.float32).reshape(numrows,
numcols)
                # build an array (ndays, nrow, ncols) of True and False for the 
pixel
count
                # when these are summed we get the relative contributions
                weights = data8days > nodatavalue
                # np.average doesn't accept a weight of zero, COMMENT ME 
                weights[0] |= (weights.sum(axis=0) == 0) 
                pixelCount = weights.sum(axis=0)
                avg8days = np.average(data8days, axis=0, weights=weights)
                doy += 8
                #print year,':',doy
                
                outfile = "lst_8day1030am_" + str(year) + str(doy) + ".gra"
                write_outputs(outfile, avg8days)
                outfile = "pixelcount_8day1030am_" + str(year) + str(doy) + 
".gra"
                write_outputs(outfile, pixelCount)

def write_outputs(outfile, data):
        opath = "/users/eow/mgdk/research/HOFF_plots/LST/8dayLST"
        try:
                of = open(os.path.join(opath, outfile), 'wb')
        except IOError:
                print "Cannot open outfile for write", outfile
                sys.exit(1)
        
        # empty stuff
        data.tofile(of)
        of.close()
        
        
if __name__ == "__main__":

        numrows = 332
        numcols = 667
        path = "/users/eow/mgdk/research/HOFF_plots/LST/gridded_03/"
        
        averageEightDays('lst_scr_2006*.gra', numrows, numcols, year=2006, 
doy=122)
        averageEightDays('lst_scr_2007*.gra', numrows, numcols, year=2007, 
doy=122)


-- 
View this message in context: 
http://old.nabble.com/Help-making-better-use-of-numpy-array-functions-tp26503657p26531909.html
Sent from the Numpy-discussion mailing list archive at Nabble.com.

_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to