def ichol(K, eta): #DEBUG: IO.pickle('/tmp/matrices/K' + str(N) + '.txt', K) N = len(K) # shape[0] d = np.diag(K).copy() j = 0 perm = [0] * N nu = [0] * N R = Lists.zeros2(N, N) while j < N: best_i = np.argmax(d) if d[best_i] <= eta: break perm[j] = best_i p_j = perm[j] nu[j] = np.sqrt(d[p_j]) for i in xrange(N): R[j][i] = K[i][p_j] for jj in xrange(j): # inner summation. R R[j][i] -= R[jj][i]*R[jj][p_j] R[j][i] /= nu[j] d[i] -= R[j][i]*R[j][i] # finally j += 1 D = j model = common.Struct() model.D = D model.R = R[:D] model.perm = perm[:D] model.nu = np.array(nu[:D]) model.K = K return model
def getRepresentations(model, K): N = len(K) D = model.D r = Lists.zeros2(N, D) for j in xrange(D): p_j = model.perm[j] for i in xrange(N): r[i][j] = K[i][p_j] for jj in xrange(j): r[i][j] -= r[i][jj] * model.R[jj][p_j] r[i][j] /= model.nu[j] return np.mat(r)