code: def sample_surface_sphere(count):
      
  
      u, v = np.random.random((2, count))
  
      theta = np.pi * 2 * u
      phi = np.arccos((2 * v) - 1)
  
      points = util.spherical_to_vector(np.column_stack((theta, phi)))
      return points
docs: Correctly pick random points on the surface of a unit sphere
  
      Uses this method:
      http://mathworld.wolfram.com/SpherePointPicking.html
  
      Parameters
      ----------
      count: int, number of points to return
  
      Returns
      ----------
      points: (count,3) float, list of random points on a unit sphere