def packParamBagForPost(pnu_K=None, ptau_K=None, w_KE=None, P_KEE=None, Post=None, **kwargs): ''' Parse provided array args and pack into parameter bag Returns ------- Post : ParamBag, with K clusters ''' pnu_K = as1D(pnu_K) ptau_K = as1D(ptau_K) w_KE = as2D(w_KE) P_KEE = as3D(P_KEE) K = pnu_K.size E = w_KE.shape[1] if Post is None: Post = ParamBag(K=K, D=E - 1, E=E) elif not hasattr(Post, 'E'): Post.E = E assert Post.K == K assert Post.D == E - 1 assert Post.E == E Post.setField('pnu_K', pnu_K, dims=('K')) Post.setField('ptau_K', ptau_K, dims=('K')) Post.setField('w_KE', w_KE, dims=('K', 'E')) Post.setField('P_KEE', P_KEE, dims=('K', 'E', 'E')) return Post
def createParamBagForPrior( Data=None, D=0, pnu=0, ptau=None, w_E=0, P_EE=None, P_diag_E=None, P_diag_val=1.0, Prior=None, **kwargs): ''' Initialize Prior ParamBag attribute. Returns ------- Prior : ParamBag with dimension attributes K, D, E with parameter attributes pnu, ptau, w_E, P_EE ''' if Data is None: D = int(D) else: D = int(Data.dim) E = D + 1 # Init parameters of 1D Wishart prior on delta pnu = np.maximum(pnu, 1e-9) ptau = np.maximum(ptau, 1e-9) # Initialize precision matrix of the weight vector if P_EE is not None: P_EE = np.asarray(P_EE) elif P_diag_E is not None: P_EE = np.diag(np.asarray(P_diag_E)) else: P_EE = np.diag(P_diag_val * np.ones(E)) assert P_EE.ndim == 2 assert P_EE.shape == (E,E) # Initialize mean of the weight vector w_E = as1D(np.asarray(w_E)) if w_E.size < E: w_E = np.tile(w_E, E)[:E] assert w_E.ndim == 1 assert w_E.size == E if Prior is None: Prior = ParamBag(K=0, D=D, E=E) if not hasattr(Prior, 'E'): Prior.E = E assert Prior.D == D assert Prior.E == E Prior.setField('pnu', pnu, dims=None) Prior.setField('ptau', ptau, dims=None) Prior.setField('w_E', w_E, dims=('E')) Prior.setField('P_EE', P_EE, dims=('E', 'E')) Pw_E = np.dot(P_EE, w_E) wPw_1 = np.dot(w_E, Pw_E) Prior.setField('Pw_E', Pw_E, dims=('E')) Prior.setField('wPw_1', wPw_1, dims=None) return Prior