15 void MNF::mnf(
const ublas::matrix<double> & data)
17 matrix<double> X = data;
19 int nSamples =
ncol(X);
23 matrix<double> covX = prod(X,
t(X));
35 matrix<double> INVDSx =
diag(1.0/DSx);
45 column(SX,0) = column(X,1);
47 matrix<double> Z1 = prod(SX,
t(X));
49 matrix<double> Z2 = prod(X,
t(SX));
59 matrix<double> Z3 = covX;
62 matrix<double> Z4 = prod(SX,
t(SX));
65 matrix<double> Z = (Z3+Z4-Z1-Z2) * 0.5;
69 matrix<double> p1,p2,p3;
70 p1 = prod(Vx, INVDSx);
73 matrix<double> ZHAT = prod(INVDSx, p3);
77 matrix<double> PSIHAT = r.
vectors;
79 psi = prod(p1, PSIHAT);
80 phi = prod(
t(X), psi);
87 void MNF::make(
const ublas::matrix<double> & data,
const std::vector<int> &
remove)
89 matrix<double> X =
static_cast<matrix<double>
>(data);
90 int n_samples =
ncol(X);
91 int n_components =
nrow(X);
95 matrix<double> Xm = X -
createMatrix(
rep(means, n_samples),0,n_samples);
99 ublas::vector<double> z =
rep(1,n_components);
102 for(
unsigned int i=0; i <
remove.size(); i++)
104 if(
unsigned(
remove[i]) < z.size())
110 matrix<double> selector =
diag(z);
112 matrix<double> spsi =
solve(psi);
113 matrix<double> ppsi_sel = prod(spsi, selector);
114 this->
filter = prod(ppsi_sel
120 ublas::matrix<double>
MNF::apply(
const ublas::matrix<double> &data)
const
123 ublas::matrix<double> X = data;
124 int n_samples =
ncol(X);
125 matrix<double> X1 = X -
createMatrix(
rep(means, n_samples),0,n_samples);
126 matrix<double> filtered = prod(
filter, X1);
127 ublas::matrix<double> filtered_ret = filtered;
131 ublas::matrix<double> MNF::extract(
const ublas::matrix<double> & data)
135 ublas::matrix<double> m =
static_cast<ublas::matrix<double>
>(phi * 20);
142 map<string, SerializedObject> ret;