title: Numpy Array Set Difference
body: <p>I have two numpy arrays that have overlapping rows:</p>
  
  <pre><code>import numpy as np
  
  a = np.array([[1,2], [1,5], [3,4], [3,5], [4,1], [4,6]])
  b = np.array([[1,5], [3,4], [4,6]])
  </code></pre>
  
  <p>You can assume that:</p>
  
  <ol>
  <li>the rows are sorted</li>
  <li>the rows within each array is unique</li>
  <li>array <code>b</code> is always subset of array <code>a</code></li>
  </ol>
  
  <p>I would like to get an array that contains all rows of <code>a</code> that are not in <code>b</code>.</p>
  
  <p>i.e.,:</p>
  
  <pre><code>[[1 2]
   [3 5]
   [4 1]]
  </code></pre>
  
  <p>Considering that <code>a</code> and <code>b</code> can be very, very large, what is the most efficient method for solving this problem?</p>