code: def _fast_cross_3d(x, y):
      
      assert x.ndim == 2
      assert y.ndim == 2
      assert x.shape[1] == 3
      assert y.shape[1] == 3
      assert (x.shape[0] == 1 or y.shape[0] == 1) or x.shape[0] == y.shape[0]
      if max([x.shape[0], y.shape[0]]) >= 500:
          return np.c_[x[:, 1] * y[:, 2] - x[:, 2] * y[:, 1],
                       x[:, 2] * y[:, 0] - x[:, 0] * y[:, 2],
                       x[:, 0] * y[:, 1] - x[:, 1] * y[:, 0]]
      else:
          return np.cross(x, y)
docs: Compute cross product between list of 3D vectors
  
      Much faster than np.cross() when the number of cross products
      becomes large (>500). This is because np.cross() methods become
      less memory efficient at this stage.
  
      Parameters
      ----------
      x : array
          Input array 1.
      y : array
          Input array 2.
  
      Returns
      -------
      z : array
          Cross product of x and y.
  
      Notes
      -----
      x and y must both be 2D row vectors. One must have length 1, or both
      lengths must match.