docs: def lensNMF(data, k, ks=1):
      """
      Runs L-EnsNMF on the data. (Suh et al. 2016)
      """
      # TODO: why is this not working
      n_rounds = k/ks
      R_i = data.copy()
      nmf = NMF(ks)
      nmf2 = NMF(ks, init='custom')
      w_is = []
      h_is = []
      rs = []
      w_i = np.zeros((data.shape[0], ks))
      h_i = np.zeros((ks, data.shape[1]))
      for i in range(n_rounds):
          R_i = R_i - w_i.dot(h_i)
          R_i[R_i < 0] = 0
          """
          P_r = R_i.sum(1)/R_i.sum()
          print(P_r.shape)
          P_c = R_i.sum(0)/R_i.sum()
          print(P_c.shape)
          row_choice = np.random.choice(range(len(P_r)), p=P_r)
          print(row_choice)
          col_choice = np.random.choice(range(len(P_c)), p=P_c)
          print(col_choice)
          D_r = cosine_similarity(data[row_choice:row_choice+1,:], data)
          D_c = cosine_similarity(data[:,col_choice:col_choice+1].T, data.T)
          D_r = np.diag(D_r.flatten())
          D_c = np.diag(D_c.flatten())
          R_L = D_r.dot(R_i).dot(D_c)
          w_i = nmf.fit_transform(R_L)
          """
          w_i = nmf.fit_transform(R_i)
          h_i = nmf.components_
          #nmf2.fit_transform(R_i, W=w_i, H=nmf.components_)
          #h_i = nmf2.components_
          #h_i[h_i < 0] = 0
          w_is.append(w_i)
          h_is.append(h_i)
          rs.append(R_i)
      return np.hstack(w_is), np.vstack(h_is), rs