[SciPy-User] How Can I Bin A Matrix?

Tim Goodsall tim.scipy at tropic.org.uk
Thu Oct 29 10:47:58 EDT 2009


 yo,
 
 
 this works I think.  Not sure how fast it is on anything big.  and it
 lops off some data if your binfactor is not a factor of the image
 dimensions.  this might be a problem for you...  asymmetric binning
 is more fun.
 
 def spatiallybin(imap, binfactor):
 
     lx,ly = imap.shape
 
 	# arbitrarily clip off some data if the dimensions not a multiple of
 	# the binning factor.
 	imap = imap[0:lx-(lx%binfactor)]
 	imap = imap[:,0:ly-ly%binfactor]
 
 	lx,ly = imap.shape
 
 	x,y = S.mgrid[0:lx:binfactor, 0:ly:binfactor]
 	x2,y2 = S.mgrid[0:lx/binfactor, 0:ly/binfactor]
 				
 	# doubt this is the fastest way to do it for massive arrays.
 	new = S.array([imap[x+i,y+j] for i in range(binfactor) for j in range(binfactor)]).sum(0)     
 
     return new
 
 
 
 
 
 On Thu, 2009-10-29 06:58, Joseph Smidt wrote:
 > Hello,
 > 
 >      Lets pretend I have some random 100x100 matrix and I wanted to
 > form a 10x10 matrix where each element of the 10x10 matrix is the
 > average of the corresponding 10x10  block of the 100x100 matrix.
 > 
 >     To make this clearer, lets suppose I have a 4x4 matrix:
 > 
 > ( 7, 2, 3, 4 )
 > ( 9, 4, 5, 6 )
 > ( 3, 5, 7, 9 )
 > ( 1, 5, 2, 6 )
 > 
 >     and lets say I want to bin it to a 2x2 matrix meaning I want to
 > create a 2x2 matrix which would be:
 > 
 > (  5.5, 4.5 )
 > (  3.5, 6.0 )
 > 
 > where 5.5 is the average of the upper left block of the 16x16 matrix:
 > 
 > ( 7, 2 )
 > ( 9, 4 )
 > 
 >    and similarly with  the other elements.
 > 
 >    Anyways, given an arbitrary NxN matrix is the an easy way to bin it
 > to an MxM matrix where N is divisible by M?  If someone could come up
 > with code to do this I would be very grateful.
 > 
 >                   Joseph Smidt
 > 
 > -- 
 > ------------------------------------------------------------------------
 > Joseph Smidt <josephsmidt at gmail.com>
 > 
 > Physics and Astronomy
 > 4129 Frederick Reines Hall
 > Irvine, CA 92697-4575
 > Office: 949-824-3269
 > _______________________________________________
 > SciPy-User mailing list
 > SciPy-User at scipy.org
 > http://mail.scipy.org/mailman/listinfo/scipy-user



More information about the SciPy-User mailing list