title: Difference between nonzero(a), where(a) and argwhere(a). When to use which?
body: <p>In Numpy, <a href="http://docs.scipy.org/doc/numpy/reference/generated/numpy.nonzero.html#numpy.nonzero" rel="noreferrer"><code>nonzero(a)</code></a>, <a href="http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html" rel="noreferrer"><code>where(a)</code></a> and <a href="http://docs.scipy.org/doc/numpy/reference/generated/numpy.argwhere.html" rel="noreferrer"><code>argwhere(a)</code></a>, with <code>a</code> being a numpy array, all seem to return the non-zero indices of the array. What are the differences between these three calls?</p>
  
  <ul>
  <li><p>On <code>argwhere</code> the documentation says:</p>
  
  <blockquote>
    <p><code>np.argwhere(a)</code> is the same as <code>np.transpose(np.nonzero(a))</code>.</p>
  </blockquote>
  
  <p>Why have a whole function that just  transposes the output of <code>nonzero</code> ? When would that be so useful that it deserves a separate function? </p></li>
  <li><p>What about the difference between <code>where(a)</code> and <code>nonzero(a)</code>? Wouldn't they return the exact same result?</p></li>
  </ul>