comparison toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/sample_node.m @ 0:e9a9cd732c1e tip

first hg version after svn
author wolffd
date Tue, 10 Feb 2015 15:05:51 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:e9a9cd732c1e
1 function y = sample_node(CPD, pev, nsamples)
2 % SAMPLE_NODE Draw a random sample from P(Xi | x(pi_i), theta_i) (tabular)
3 % Y = SAMPLE_NODE(CPD, PEV, NSAMPLES)
4 %
5 % pev(i,m) is the value of the i'th parent in sample m (if there are any parents).
6 % y(m) is the m'th sampled value (a row vector).
7 % (If pev is a cell array, so is y.)
8 % nsamples defaults to 1.
9
10 if nargin < 3, nsamples = 1; end
11
12 %if nargin < 4, usecell = 0; end
13 if iscell(pev), usecell = 1; else usecell = 0; end
14
15 if nsamples == 1, pev = pev(:); end
16
17 sz = CPD.sizes;
18 nparents = length(sz)-1;
19 if nparents==0
20 y = sample_discrete(CPD.CPT, 1, nsamples);
21 if usecell
22 y = num2cell(y);
23 end
24 return;
25 end
26
27 sz = CPD.sizes;
28 [nparents nsamples] = size(pev);
29
30 if usecell
31 pvals = cell2num(pev)'; % each row is a case
32 else
33 pvals = pev';
34 end
35
36 psz = sz(1:end-1);
37 ssz = sz(end);
38 ndx = subv2ind(psz, pvals);
39 T = reshape(CPD.CPT, [prod(psz) ssz]);
40 T2 = T(ndx,:); % each row is a distribution selected by the parents
41 C = cumsum(T2, 2); % sum across columns
42 R = rand(nsamples, 1);
43 y = ones(nsamples, 1);
44 for i=1:ssz-1
45 y = y + (R > C(:,i));
46 end
47 y = y(:)';
48 if usecell
49 y = num2cell(y);
50 end
51
52
53