From ad4fbabeca2cbdf4cb47f1a923183027494ab0a8 Mon Sep 17 00:00:00 2001 From: Samuel Fadel Date: Thu, 22 Oct 2015 16:39:15 -0200 Subject: Added PLMP as an alternative technique to use; knn() is now exposed in the mp namespace. --- plmp.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 plmp.cpp (limited to 'plmp.cpp') 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; +} -- cgit v1.2.3