Mercurial > hg > camir-aes2014
annotate toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/prob_node.m @ 0:e9a9cd732c1e tip
first hg version after svn
author | wolffd |
---|---|
date | Tue, 10 Feb 2015 15:05:51 +0000 |
parents | |
children |
rev | line source |
---|---|
wolffd@0 | 1 function p = prob_node(CPD, self_ev, pev) |
wolffd@0 | 2 % PROB_NODE Compute P(y|pa(y), theta) (tabular) |
wolffd@0 | 3 % p = prob_node(CPD, self_ev, pev) |
wolffd@0 | 4 % |
wolffd@0 | 5 % self_ev{m} is the evidence on this node in case m |
wolffd@0 | 6 % pev{i,m} is the evidence on the i'th parent in case m |
wolffd@0 | 7 % If there is a single case, self_ev can be a scalar instead of a cell array |
wolffd@0 | 8 |
wolffd@0 | 9 ncases = size(pev, 2); |
wolffd@0 | 10 |
wolffd@0 | 11 %assert(~any(isemptycell(pev))); % slow |
wolffd@0 | 12 %assert(~any(isemptycell(self_ev))); % slow |
wolffd@0 | 13 |
wolffd@0 | 14 CPT = CPD_to_CPT(CPD); |
wolffd@0 | 15 sz = mysize(CPT); |
wolffd@0 | 16 nparents = length(sz)-1; |
wolffd@0 | 17 assert(nparents == size(pev, 1)); |
wolffd@0 | 18 |
wolffd@0 | 19 if ncases==1 |
wolffd@0 | 20 x = cat(1, pev{:}); |
wolffd@0 | 21 if iscell(y) |
wolffd@0 | 22 y = self_ev{1}; |
wolffd@0 | 23 else |
wolffd@0 | 24 y = self_ev; |
wolffd@0 | 25 end |
wolffd@0 | 26 switch nparents |
wolffd@0 | 27 case 0, p = CPT(y); |
wolffd@0 | 28 case 1, p = CPT(x(1), y); |
wolffd@0 | 29 case 2, p = CPT(x(1), x(2), y); |
wolffd@0 | 30 case 3, p = CPT(x(1), x(2), x(3), y); |
wolffd@0 | 31 otherwise, |
wolffd@0 | 32 ind = subv2ind(CPD.sizes, [x y]); |
wolffd@0 | 33 p = CPT(ind); |
wolffd@0 | 34 end |
wolffd@0 | 35 else |
wolffd@0 | 36 x = num2cell(pev)'; % each row is a case |
wolffd@0 | 37 y = cat(1, self_ev{:})'; |
wolffd@0 | 38 ind = subv2ind(CPD.sizes, [x y]); |
wolffd@0 | 39 p = CPT(ind); |
wolffd@0 | 40 end |