[Numpy-discussion] subsampling arrays without loops

Jaime Fernández del Río jaime.frio at gmail.com
Thu Oct 3 19:17:31 EDT 2013


On Thu, Oct 3, 2013 at 4:05 PM, Moroney, Catherine M (398D) <
Catherine.M.Moroney at jpl.nasa.gov> wrote:

> I know I have a lot yet to learn about array striding tricks, so please
> pardon the triviality of this question.
>
> Here is the problem both in words and "dumb" python:
>
> I have a large NxM array that I want to break down into smaller nxn chunks
> where n divides evenly into both N and M.  Then I want to calculate the
> fraction of pixels in each nxn chunk that meets a certain criteria: say (x
> > 1) & (x < 2).
>

If n divides both N and M, you can simply reshape your array to 4D, then
reduce it back to 2D:

import numpy as np

N, M = 1000, 2000
n = 100

a = np.random.rand(N,M) * 5
a_view = a.reshape(a.shape[0] // n, n, a.shape[1] // n, n)
a_fractions = np.sum((a_view > 1) & (a_view < 2), axis=(1, 3)) / (n * n)

>>> a_fractions.shape
(10L, 20L)

>>> a_fractions
array([[ 0.1965,  0.1964,  0.202 ,  0.1997,  0.1976,  0.1997,  0.2026,
         0.1951,  0.2051,  0.1995,  0.1926,  0.2006,  0.1973,  0.1964,
         0.2046,  0.1977,  0.2066,  0.2009,  0.2003,  0.2013],
       ...
       [ 0.2028,  0.1943,  0.2036,  0.1992,  0.2   ,  0.2009,  0.1971,
         0.1996,  0.196 ,  0.196 ,  0.1983,  0.2021,  0.2031,  0.1955,
         0.1916,  0.1939,  0.202 ,  0.2064,  0.2021,  0.1954]])

Jaime

 --
(\__/)
( O.o)
( > <) Este es Conejo. Copia a Conejo en tu firma y ayúdale en sus planes
de dominación mundial.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20131003/48ba06ec/attachment.html>


More information about the NumPy-Discussion mailing list