1'''
2Created on 24 Feb 2014
3
4@author: maxz
5'''
6
7import numpy as np
8from ..util.pca import PCA
9
10def initialize_latent(init, input_dim, Y):
11    Xr = np.asfortranarray(np.random.normal(0, 1, (Y.shape[0], input_dim)))
12    if 'PCA' in init:
13        p = PCA(Y)
14        PC = p.project(Y, min(input_dim, Y.shape[1]))
15        Xr[:PC.shape[0], :PC.shape[1]] = PC
16        var = .1*p.fracs[:input_dim]
17    elif init in 'empirical_samples':
18        from ..util.linalg import tdot
19        from ..util import diag
20        YYT = tdot(Y)
21        diag.add(YYT, 1e-6)
22        EMP = np.asfortranarray(np.random.multivariate_normal(np.zeros(Y.shape[0]), YYT, min(input_dim, Y.shape[1])).T)
23        Xr[:EMP.shape[0], :EMP.shape[1]] = EMP
24        var = np.random.uniform(0.5, 1.5, input_dim)
25    else:
26        var = Xr.var(0)
27
28    Xr -= Xr.mean(0)
29    Xr /= Xr.std(0)
30
31    return Xr, var/var.max()
32