title: Python eigenvectors: differences among numpy.linalg, scipy.linalg and scipy.sparse.linalg
body: <p>Scipy and Numpy have between them three different functions for finding eigenvectors for a given square matrix, these are:</p>
  <ol>
  <li><a href="http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.eig.html#numpy.linalg.eig" rel="noreferrer"><code>numpy.linalg.eig(a)</code></a></li>
  <li><a href="http://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.eig.html#scipy.linalg.eig" rel="noreferrer"><code>scipy.linalg.eig(a)</code></a>, and</li>
  <li><a href="http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.eigs.html#scipy.sparse.linalg.eigs" rel="noreferrer"><code>scipy.sparse.linalg.eig(A, k)</code></a></li>
  </ol>
  <p>Focusing specifically on the situation that all the optional arguments I've left off the last two are left at their defaults and that <code>a</code>/<code>A</code> is real-valued, I am curious about the differences among these three which are ambiguous from the documentation - especially:</p>
  <ul>
  <li>Why does (3) have a note that it can't find <em>all</em> eigenvectors?</li>
  <li>Why <em>must</em> the other two compute all solutions - why don't they take a <code>k</code> argument?</li>
  <li>(1) has a note saying that the eigenvalues are returned in no particular order; (3) has an optional argument to control the order. Does (2) make any guarantees about this?</li>
  <li>Does (3) assume that <code>A</code> is sparse? (mathematically speaking, rather than being represented as a scipy sparse matrix) Can it be inefficient, or even give wrong results, if this assumption doesn't hold?</li>
  <li>Are there other factors I should consider when choosing among these?</li>
  </ul>