title: Why does numpy.linalg.solve() offer more precise matrix inversions than numpy.linalg.inv()?
body: <p>I do not quite understand why <code>numpy.linalg.solve()</code> gives the more precise answer, whereas <code>numpy.linalg.inv()</code> breaks down somewhat, giving (what I believe are) estimates. </p>
  
  <p>For a concrete example, I am solving the equation <code>C^{-1} * d</code>  where <code>C</code> denotes a matrix, and <code>d</code> is a vector-array. For the sake of discussion, the dimensions of <code>C</code> are shape <code>(1000,1000)</code> and <code>d</code> is shape <code>(1,1000)</code>. </p>
  
  <p><code>numpy.linalg.solve(A, b)</code> solves the equation <code>A*x=b</code> for x, i.e. <code>x = A^{-1} * b.</code> Therefore, I could either solve this equation by</p>
  
  <p>(1)</p>
  
  <pre><code>inverse = numpy.linalg.inv(C)
  result = inverse * d
  </code></pre>
  
  <p>or (2)</p>
  
  <pre><code>numpy.linalg.solve(C, d)
  </code></pre>
  
  <p>Method (2) gives far more precise results. Why is this?  </p>
  
  <p>What exactly is happening such that one "works better" than the other? </p>