title: Using views for NumPy broadcasting
body: <p>Suppose I have a 2D np.array <code>X</code>, and I need to use <code>X[:, None, :]</code> in some intermediate computations; for instance 
  <code>np.sum(X[:, None, :] == Y[None, :, :], axis=2)</code> where <code>Y</code> is also a 2D np.array. </p>
  
  <p>Does this operation explicitly copies the memory for <code>X</code> and <code>Y</code> to create <code>X[:, None, :]</code> and <code>Y[:, None, :]</code>? If so, is there a way to avoid this copying by using views in NumPy?</p>