code: def kmm_init(X, m = 10):
      
  
      # compute the distances
      XXT = np.dot(X, X.T)
      D = (-2.*XXT + np.diag(XXT)[:,np.newaxis] + np.diag(XXT)[np.newaxis,:])
  
      # select the first point
      s = np.random.permutation(X.shape[0])[0]
      inducing = [s]
      prob = D[s]/D[s].sum()
  
      for z in range(m-1):
          s = np.random.multinomial(1, prob.flatten()).argmax()
          inducing.append(s)
          prob = D[s]/D[s].sum()
  
      inducing = np.array(inducing)
      return X[inducing]
docs: This is the same initialization algorithm that is used
      in Kmeans++. It's quite simple and very useful to initialize
      the locations of the inducing points in sparse GPs.
  
      :param X: data
      :param m: number of inducing points