wolffd@0: function p = prob_CPD(CPD, domain, ns, cnodes, evidence) wolffd@0: % PROB_CPD Compute prob of a node given evidence on the parents (discrete) wolffd@0: % p = prob_CPD(CPD, domain, ns, cnodes, evidence) wolffd@0: % wolffd@0: % domain is the domain of CPD. wolffd@0: % node_sizes(i) is the size of node i. wolffd@0: % cnodes = all the cts nodes wolffd@0: % evidence{i} is the evidence on the i'th node. wolffd@0: wolffd@0: ps = domain(1:end-1); wolffd@0: self = domain(end); wolffd@0: CPT = CPD_to_CPT(CPD); wolffd@0: wolffd@0: if isempty(ps) wolffd@0: T = CPT; wolffd@0: else wolffd@0: assert(~any(isemptycell(evidence(ps)))); wolffd@0: pvals = cat(1, evidence{ps}); wolffd@0: i = subv2ind(ns(ps), pvals(:)'); wolffd@0: T = reshape(CPT, [prod(ns(ps)) ns(self)]); wolffd@0: T = T(i,:); wolffd@0: end wolffd@0: p = T(evidence{self}); wolffd@0: wolffd@0: