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

Tim Goodsall tim.scipy@tropic.org...
Thu Oct 29 09:47:58 CDT 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@gmail.com>
>
> Physics and Astronomy
> 4129 Frederick Reines Hall
> Irvine, CA 92697-4575
> Office: 949-824-3269
> _______________________________________________
> SciPy-User mailing list
> SciPy-User@scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-user
```