diff options
author | Samuel Fadel <samuelfadel@gmail.com> | 2015-10-22 16:39:15 -0200 |
---|---|---|
committer | Samuel Fadel <samuelfadel@gmail.com> | 2015-10-22 16:39:15 -0200 |
commit | ad4fbabeca2cbdf4cb47f1a923183027494ab0a8 (patch) | |
tree | 4a9c16454ff4d802b23a8271f4005ee1846f7b1b /plmp.cpp | |
parent | 99ac0af03e1695ba4de2c42e949fce61b84850e5 (diff) |
Added PLMP as an alternative technique to use; knn() is now exposed in the mp namespace.
Diffstat (limited to 'plmp.cpp')
-rw-r--r-- | plmp.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/plmp.cpp b/plmp.cpp new file mode 100644 index 0000000..0ca1b83 --- /dev/null +++ b/plmp.cpp @@ -0,0 +1,22 @@ + +#include "mp.h" + +arma::mat mp::plmp(const arma::mat &X, const arma::uvec &sampleIndices, const arma::mat &Ys) +{ + arma::mat Y(X.n_rows, Ys.n_cols); + mp::plmp(X, sampleIndices, Ys, Y); + return Y; +} + +void mp::plmp(const arma::mat &X, const arma::uvec &sampleIndices, const arma::mat &Ys, arma::mat &Y) +{ + arma::mat Xs = X.rows(sampleIndices); + Xs.each_row() -= arma::mean(Xs); + arma::mat lYs = Ys; + lYs.each_row() -= arma::mean(Ys); + const arma::mat &Xst = Xs.t(); + arma::mat P = arma::solve(Xst * Xs, Xst * lYs); + + Y = X * P; + Y.rows(sampleIndices) = lYs; +} |