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

mdekauwe mdekauwe at gmail.com
Thu Nov 26 08:49:18 EST 2009



Vincent Schut-2 wrote:
> 
> Oh, and minor issue: creating a array of zeros and then multiplying with 
> -999 still makes an array of zeros... I'd incorporated an array of 
> *ones* multiplied with -999, because for the last chunk of days you 
> could end up with a 8day array only partly filled with real data. E.g. 
> if you'd have only 3 days of data left in your last chunk, 8dayData[0:3] 
> would be data, and to prevent the rest ([3:8]) to be incorporated into 
> the average calculation, these need to be -999. Currently these pixels 
> will be 0, which is > nodatavalue, and thus infuencing your average (the 
> pixelcount will be incremented for these 0 values).
> 

Ok I hadn't thought about it in that way but you are of course right! I have
amended it.


Vincent Schut-2 wrote:
> 
> Alternatively, you could simply take the sum over axis=0 of the weight 
> array to get the pixel count (e.g. "pixelcount=weight.sum(axis=0)").
> 

Ok I see your point here as well. So I tried implementing your suggestion,
as I understand it

weights = data8days > nodatavalue

will make and 8, nrows, ncols array containing true and false.

as you said I can get the pixel count I was after by using
weights.sum(axis=0).

However when I try to do the averaging step:

avg8days = np.average(data8days, axis=0, weights=weights)

I get the error msg " in average raise ZeroDivisionError, "Weights sum to
zero, can't be normalized"
ZeroDivisionError: Weights sum to zero, can't be normalized"

Which I guess (but don't know) comes from the trying do weight by a pixel
count of zero. So not sure what has happened here?

Thanks 


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




More information about the NumPy-Discussion mailing list