title: numpy array slicing, get one from each third dimension
body: <p>I have a 3D array of data. I have a 2D array of indices, where the shape matches the first two dimensions of the data array, and it specfies the indices I want to pluck from the data array to make a 2D array. eg:</p>
  
  <pre><code> from numpy import *
   a = arange(3 * 5 * 7).reshape((3,5,7))
   getters = array([0,1,2] * (5)).reshape(3,5)
  </code></pre>
  
  <p>What I'm looking for is a syntax like <code>a[:, :, getters]</code> which returns an array of shape (3,5) by indexing independently into the third dimension of each item. However, <code>a[:, :, getters]</code> returns an array of shape (3,5,3,5). I can do it by iterating and building a new array, but this is pretty slow:</p>
  
  <pre><code> array([[col[getters[ri,ci]] for ci,col in enumerate(row)] for ri,row in enumerate(a)])
   # gives array([[  0,   8,  16,  21,  29],
   #    [ 37,  42,  50,  58,  63],
   #    [ 71,  79,  84,  92, 100]])
  </code></pre>
  
  <p>Is there a neat+fast way?</p>