39 MathLib::Matrix fMatrix;
41 if (fMatrix(0, fMatrix.ColumnSize() - 1) > 0.0)
43 nbStates = fMatrix.ColumnSize();
47 nbStates = fMatrix.ColumnSize() - 1;
50 for (s = 0; s < nbStates; s++)
52 model.States[s].Prio = fMatrix(0, s);
56 nbDim = fMatrix.RowSize();
57 model.nbStates = nbStates;
61 for (s = 0; s < nbStates; s++)
63 model.States[s].Mu.Resize(nbDim);
64 model.States[s].Sigma.Resize(nbDim, nbDim);
67 for (s = 0; s < nbStates; s++)
69 model.States[s].Mu = fMatrix.GetColumn(s);
72 fMatrix.Load(f_sigma);
74 for (s = 0; s < nbStates; s++)
76 for (i = 0; i < nbDim; i++)
78 model.States[s].Sigma.SetRow(fMatrix.GetRow(j), i);
93 model.nbStates = nbStates;
96 for (s = 0; s < nbStates; s++)
98 model.States[s].Mu.Resize(nbDim);
99 model.States[s].Sigma.Resize(nbDim, nbDim);
102 MathLib::Matrix fMatrix(nbDim, nbStates);
104 for (s = 0; s < nbStates; s++)
106 model.States[s].Mu = fMatrix.GetColumn(s);
109 fMatrix.Resize(nbStates * nbDim, nbDim);
110 fMatrix.Load(f_sigma);
112 for (s = 0; s < nbStates; s++)
114 for (i = 0; i < nbDim; i++)
116 model.States[s].Sigma.SetRow(fMatrix.GetRow(j), i);
121 fMatrix.Resize(1, nbStates);
122 fMatrix.Load(f_prio);
123 MathLib::Vector fVector(nbStates);
124 for (s = 0; s < nbStates; s++)
126 model.States[s].Prio = fMatrix(0, s);
132 const vector<double> pri_vec,
133 const vector<double> mu_vec,
134 const vector<double> sig_vec)
137 model.nbStates = nbStates;
140 for (
int s = 0; s < nbStates; s++)
142 model.States[s].Mu.Resize(nbDim);
143 model.States[s].Sigma.Resize(nbDim, nbDim);
146 for (
int s = 0; s < nbStates; s++)
148 model.States[s].Prio = pri_vec[s];
157 for (
int s = 0; s < nbStates; s++)
159 for (
int d = 0; d < nbDim; d++)
161 model.States[s].Mu[d] = mu_vec[s * nbDim + d];
174 for (
int s = 0; s < nbStates; s++)
176 for (
int row = 0; row < nbDim; row++)
178 for (
int col = 0; col < nbDim; col++)
180 int ind = s * nbDim * nbDim + row * nbDim + col;
181 model.States[s].Sigma(row, col) = sig_vec[ind];
214 int nbIN = last_inindex - first_inindex + 1;
216 for (
unsigned int s = 0; s <
model.nbStates; s++)
218 gmmpinv[s].MuI.Resize(nbIN);
219 gmmpinv[s].SigmaII.Resize(nbIN, nbIN);
220 gmmpinv[s].SigmaIIInv.Resize(nbIN, nbIN);
223 for (
unsigned int s = 0; s <
model.nbStates; s++)
225 for (
int i = first_inindex; i <= last_inindex; i++)
227 gmmpinv[s].MuI(i - first_inindex) =
model.States[s].Mu(i);
229 for (
int i = first_inindex; i <= last_inindex; i++)
230 for (
int j = first_inindex; j <= last_inindex; j++)
232 gmmpinv[s].SigmaII(i - first_inindex, j - first_inindex) =
233 model.States[s].Sigma(i, j);
236 gmmpinv[s].SigmaII.Inverse(gmmpinv[s].SigmaIIInv, &det);
243 gmmpinv[s].detSigmaII = det;
246 nbDimI = last_inindex - first_inindex + 1;
292 int nbIN = last_inindex - first_inindex + 1;
293 int nbOUT = last_outindex - first_outindex + 1;
297 for (
unsigned int s = 0; s <
model.nbStates; s++)
299 gmmpinv[s].MuI.Resize(nbIN);
300 gmmpinv[s].SigmaII.Resize(nbIN, nbIN);
301 gmmpinv[s].SigmaIIInv.Resize(nbIN, nbIN);
303 gmmpinv[s].muO.Resize(nbOUT);
304 gmmpinv[s].SigmaIO.Resize(nbIN, nbOUT);
305 gmmpinv[s].SigmaIOInv.Resize(nbOUT, nbOUT);
308 for (
unsigned int s = 0; s <
model.nbStates; s++)
310 for (
int i = first_inindex; i <= last_inindex; i++)
312 gmmpinv[s].MuI(i - first_inindex) =
model.States[s].Mu(i);
314 for (
int j = first_inindex; j <= last_inindex; j++)
316 gmmpinv[s].SigmaII(i - first_inindex, j - first_inindex) =
317 model.States[s].Sigma(i, j);
319 for (
int j = first_outindex; j <= last_outindex; j++)
321 gmmpinv[s].SigmaIO(i - first_inindex, j - first_outindex) =
322 model.States[s].Sigma(i, j);
326 for (
int i = first_outindex; i <= last_outindex; i++)
328 gmmpinv[s].muO(i - first_outindex) =
model.States[s].Mu(i);
331 gmmpinv[s].SigmaII.Inverse(gmmpinv[s].SigmaIIInv, &det);
336 gmmpinv[s].detSigmaII = det;
337 (gmmpinv[s].SigmaIO).Transpose().Inverse(gmmpinv[s].SigmaIOInv, &det);
340 nbDimI = last_inindex - first_inindex + 1;
359 MathLib::Vector h(
model.nbStates);
360 MathLib::Vector r_diff(outdata.Size());
362 for (
unsigned int s = 0; s <
model.nbStates; s++)
369 for (
unsigned int s = 0; s <
model.nbStates; s++)
372 h(s) =
gPdf(s) / (pdfall);
373 r_diff = gmmpinv[s].SigmaIO.Transpose() * gmmpinv[s].SigmaIIInv * (indata - gmmpinv[s].MuI);
375 for (
unsigned int i = 0; i < r_diff.Size(); i++)
377 outdata(i) += h(s) * (r_diff(i) + gmmpinv[s].muO(i));