Thu, 22 Jul 2010 00:47:20 -0400, Robin Kraft wrote: [clip] > Let's say the image looks like this: np.random.randint(0,2, > 16).reshape(4,4) > > array([[0, 0, 0, 1], > [0, 0, 1, 1], > [1, 1, 0, 0], > [0, 0, 0, 0]]) > > I want to use a square, non-overlapping moving window for resampling, so > that I get a count of all the 1's in each 2x2 window. > > 0, 0, 0, 1 > 0, 0, 1, 1 0 3 > => 2 0 > 1, 1, 0, 0 > 0, 0, 0, 0 > > In another situation with similar data I'll need the average, or the > maximum value, etc..
Non-overlapping windows can be done by reshaping: x = np.array([[0, 0, 0, 1, 1, 1], [0, 0, 1, 1, 0, 0], [1, 1, 0, 0, 1, 1], [0, 0, 0, 0, 1, 1], [1, 0, 1, 0, 1, 1], [0, 0, 1, 0, 0, 0]]) y = x.reshape(3,2,3,2) y2 = y.sum(axis=3).sum(axis=1) # -> array([[0, 3, 2], # [2, 0, 4], # [1, 2, 2]]) y2 = x.reshape(3,2,3,2).transpose(0,2,1,3).reshape(3,3,4).sum(axis=-1) # -> array([[0, 3, 2], # [2, 0, 4], # [1, 2, 2]]) The above requires no copying of data, and should be relatively fast. If you need overlapping windows, those can be emulated with strides: http://mentat.za.net/numpy/scipy2009/stefanv_numpy_advanced.pdf http://conference.scipy.org/scipy2010/slides/tutorials /stefan_vd_walt_numpy_advanced.pdf -- Pauli Virtanen _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion