title: Indexing every other 2x2 block in 2D array
body: <p>Say I have an array that looks like</p>
  <pre><code>array([[ 0,  1,  2,  3,  4,  5,  6,  7],
         [ 8,  9, 10, 11, 12, 13, 14, 15],
         [16, 17, 18, 19, 20, 21, 22, 23],
         [24, 25, 26, 27, 28, 29, 30, 31],
         [32, 33, 34, 35, 36, 37, 38, 39],
         [40, 41, 42, 43, 44, 45, 46, 47],
         [48, 49, 50, 51, 52, 53, 54, 55],
         [56, 57, 58, 59, 60, 61, 62, 63]])
  </code></pre>
  <p>And I wanted to extract the following array:</p>
  <pre><code>array([[ 0,  1, 4,  5],
         [ 8,  9, 12, 13],
         [32, 33, 36, 37],
         [40, 41, 44, 45]])
  </code></pre>
  <p>Essentially it's the top-left 2x2 block in every 4x4 macro-block.
  I saw <a href="https://stackoverflow.com/questions/57222342/indexing-in-numpy-access-every-other-group-of-values">this example</a> in 1D, but couldn't figure out the 2D case.
  Another way I can think of is:</p>
  <pre><code>h, w = full.shape
  X, Y = np.meshgrid(np.arange(w), np.arange(h))
  tl = full[(X%4&lt;2) &amp; (Y%4&lt;2)].reshape((h//2,-1))
  </code></pre>
  <p>But I wonder if there's a cleaner way of doing this.</p>