def get_tr_kernel(self, sstats_list):
     self.N_tr = sstats_list[0].reshape((-1, self.D)).shape[0]
     # Initialise train kernel.
     tr_kernel = np.zeros((self.N_tr, self.N_tr))
     # Initialise normalization constants.
     self.Zx = np.zeros(self.N_tr)
     for ii, sstats in enumerate(sstats_list):
         self._append_data(
             *standardize(FVModel.sstats_to_features(sstats, self.gmm)))
         self.xx[ii] = power_normalize(self.xx[ii], 0.5)
         self.Zx += compute_L2_normalization(self.xx[ii])
         tr_kernel += np.dot(self.xx[ii], self.xx[ii].T)
     # Normalize kernel.
     tr_kernel /= np.sqrt(
         self.Zx[:, np.newaxis] * self.Zx[np.newaxis])
     return tr_kernel
 def get_te_kernel(self, sstats_list):
     self.N_te = sstats_list[0].reshape((-1, self.D)).shape[0]
     # Initialise train kernel.
     te_kernel = np.zeros((self.N_te, self.N_tr))
     # Initialise normalization constants.
     self.Zy = np.zeros(self.N_te)
     for ii, sstats in enumerate(sstats_list):
         yy = standardize(
             FVModel.sstats_to_features(sstats, self.gmm), self.mu[ii],
             self.sigma[ii])[0]
         yy = power_normalize(yy, 0.5)
         self.Zy += compute_L2_normalization(yy)
         te_kernel += np.dot(yy, self.xx[ii].T)
     # Normalize kernel.
     te_kernel /= np.sqrt(
         self.Zy[:, np.newaxis] * self.Zx[np.newaxis])
     return te_kernel