Daniel@0: function T = convert_to_table(CPD, domain, evidence) Daniel@0: % CONVERT_TO_TABLE Convert a Gaussian CPD to a table Daniel@0: % T = convert_to_table(CPD, domain, evidence) Daniel@0: Daniel@0: Daniel@0: sz = CPD.sizes; Daniel@0: ns = zeros(1, max(domain)); Daniel@0: ns(domain) = sz; Daniel@0: Daniel@0: odom = domain(~isemptycell(evidence(domain))); Daniel@0: ps = domain(1:end-1); Daniel@0: cps = ps(CPD.cps); Daniel@0: dps = ps(CPD.dps); Daniel@0: self = domain(end); Daniel@0: cdom = [cps(:)' self]; Daniel@0: ddom = dps; Daniel@0: cnodes = cdom; Daniel@0: Daniel@0: [m, C, W] = gaussian_CPD_params_given_dps(CPD, domain, evidence); Daniel@0: Daniel@0: Daniel@0: ns(odom) = 1; Daniel@0: dpsize = prod(ns(dps)); Daniel@0: self = domain(end); Daniel@0: assert(myismember(self, odom)); Daniel@0: self_val = evidence{self}; Daniel@0: T = zeros(dpsize, 1); Daniel@0: if length(cps) > 0 Daniel@0: assert(~any(isemptycell(evidence(cps)))); Daniel@0: cps_vals = cat(1, evidence{cps}); Daniel@0: for i=1:dpsize Daniel@0: T(i) = gaussian_prob(self_val, m(:,i) + W(:,:,i)*cps_vals, C(:,:,i)); Daniel@0: end Daniel@0: else Daniel@0: for i=1:dpsize Daniel@0: T(i) = gaussian_prob(self_val, m(:,i), C(:,:,i)); Daniel@0: end Daniel@0: end