[SciPy-User] sum of array for masked area only

Oleksandr Huziy guziy.sasha at gmail.com
Thu Nov 28 10:26:23 EST 2013


Hi

what is your scipy version? Does changing np.sum to MA.sum fix the problem?
This is the only reason I can why it might not work.

You are calculating your group statistics in time and space simultaneously,
is this really what you need?...
Cheers


2013/11/27 questions anon <questions.anon at gmail.com>

> Hi All,
> I am not completely sure if this is the correct place for this question,
>
> I have a separate text file for daily rainfall data that covers the whole
> country. I would like to calculate the monthly mean, min, max and the mean
> of the sum for one state.
> The mean, max and min are just the mean, max and min for all data in that
> month however the sum data needs to work out the total for the month across
> the array and then sum that value.
>
> I use gdal tools to mask out the rest of the country and I use numpy tools
> for the summary stats.
>
> I can get the max, min and mean for the state, but the mean of the sum
> keeps giving me a result for the whole country rather than just the state,
> even though I am performing the analysis on the state only data. I am not
> sure if this is a masking issue or a numpy calculation issue. The mask
> works fine for the other summary statistics.
>
> Any feedback will be greatly appreciated!
>
>
> import numpy as np
> import matplotlib.pyplot as plt
> from numpy import ma as MA
> from mpl_toolkits.basemap import Basemap
> from datetime import datetime as dt
> from datetime import timedelta
> import os
> from StringIO import StringIO
> from osgeo import gdal, gdalnumeric, ogr, osr
> import glob
> import matplotlib.dates as mdates
> import sys
>
> shapefile=r"/Users/state.shp"
>
> ## Create masked array from shapefile
> xmin,ymin,xmax,ymax=[111.975,-9.975, 156.275,-44.525]
> ncols,nrows=[886, 691] #Your rows/cols
> maskvalue = 1
>
> xres=(xmax-xmin)/float(ncols)
> yres=(ymax-ymin)/float(nrows)
> geotransform=(xmin,xres,0,ymax,0, -yres)
> 0
> src_ds = ogr.Open(shapefile)
> src_lyr=src_ds.GetLayer()
>
> dst_ds = gdal.GetDriverByName('MEM').Create('',ncols, nrows, 1
> ,gdal.GDT_Byte)
> dst_rb = dst_ds.GetRasterBand(1)
> dst_rb.Fill(0) #initialise raster with zeros
> dst_rb.SetNoDataValue(0)
> dst_ds.SetGeoTransform(geotransform)
>
> err = gdal.RasterizeLayer(dst_ds, [maskvalue], src_lyr)
> dst_ds.FlushCache()
>
> mask_arr=dst_ds.GetRasterBand(1).ReadAsArray()
> np.set_printoptions(threshold='nan')
> mask_arr[mask_arr == 255] = 1
>
> newmask=MA.masked_equal(mask_arr,0)
>
>
> ### calculate monthly summary stats for state Only
>
> rainmax=[]
> rainmin=[]
> rainmean=[]
> rainsum=[]
>
> yearmonthlist=[]
> yearmonth_int=[]
> errors=[]
>
> OutputFolder=r"/outputfolder"
> GLOBTEMPLATE =
> r"/daily-rainfall/combined/rainfall-{year}/r{year}{month:02}??.txt"
>
> def accumulate_month(year, month):
>     files = glob.glob(GLOBTEMPLATE.format(year=year, month=month))
>     monthlyrain=[]
>      for ifile in files:
>         try:
>             f=np.genfromtxt(ifile,skip_header=6)
>         except:
>             print "ERROR with file:", ifile
>             errors.append(ifile)
>         f=np.flipud(f)
>
>         stateonly_f=np.ma.masked_array(f, mask=newmask.mask) # this masks
> data to state
>
>
>         print "stateonly_f:", stateonly_f.max(), stateonly_f.mean(),
> stateonly_f.sum()
>
>         monthlyrain.append(stateonly_f)
>
>     yearmonth=dt(year,month,1)
>     yearmonthlist.append(yearmonth)
>     yearmonthint=str(year)+str(month)
>     d=dt.strptime(yearmonthint, '%Y%m')
>     print d
>     date_string=dt.strftime(d,'%Y%m')
>     yearmonthint=int(date_string)
>     yearmonth_int.append(yearmonthint)
>
>     r_sum=np.sum(monthlyrain, axis=0)
>     r_mean_of_sum=MA.mean(r_sum)
>
>     r_max, r_mean, r_min=MA.max(monthlyrain), MA.mean(monthlyrain),
> MA.min(monthlyrain)
>     rainmax.append(r_max)
>     rainmean.append(r_mean)
>     rainmin.append(r_min)
>     rainsum.append(r_mean_of_sum)
>
>
>
>     print " state only:", yearmonthint,r_max, r_mean, r_min, r_mean_of_sum
>
>
>
>
>
> _______________________________________________
> SciPy-User mailing list
> SciPy-User at scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-user
>
>


-- 
Sasha
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20131128/c0522087/attachment.html>


More information about the SciPy-User mailing list