[Numpy-discussion] Help making better use of numpy array functions

mdekauwe mdekauwe@gmail....
Thu Nov 26 05:53:02 CST 2009


Thanks...I have adopted that and as you said it is a lot neater! Though I
need to keep the pixel count for a weighting in another piece of code so
have amended your logic slightly.

#!/usr/bin/env python


import sys, os, glob
import numpy as np

def averageEightDays(filenamesList, numrows, numcols, year):
	doy = 122
	nodatavalue =  -999.0
	
	for fchunk in filenamesList:
		# fill with nodata values, in case there are less than 8 days
		data8days = np.zeros((8, numrows, numcols), dtype=np.float32) * -999.0 
		pixCount = np.zeros((numrows, numcols), dtype=np.int)
		avg8days = np.zeros((numrows, numcols), dtype=np.float32)
		for day in xrange(len(fchunk)):
			f = fchunk[day]
			data8days[day] = np.fromfile(f, dtype=np.float32).reshape(numrows,
numcols)
			avg8days = np.where(data8days[day] > nodatavalue,
avg8days+data8days[day], avg8days)
			pixCount = np.where(data8days[day] > nodatavalue, pixCount+1, pixCount)
		
		avg8days = np.where(pixCount > 0, avg8days / np.float32(pixCount), -999.0)
		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, pixCount)

def write_outputs(outfile, data):
	opath = "/users/eow/mgdk/research/HOFF_plots/LST/tmp"
	
	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/"
	
	files = 'lst_scr_2006*.gra'
	filenames = glob.glob(os.path.join(path, files))
	filenames.sort()
	filenamesList = [filenames[n:n+8] for n in xrange(0, len(filenames), 8)]
	averageEightDays(filenamesList, numrows, numcols, year=2006)
	
	files = 'lst_scr_2007*.gra'
	filenames = glob.glob(os.path.join(path, files))
	filenames.sort()
	filenamesList = [filenames[n:n+8] for n in xrange(0, len(filenames), 8)]
	averageEightDays(filenamesList, numrows, numcols, year=2007)

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



More information about the NumPy-Discussion mailing list