aboutsummaryrefslogtreecommitdiff
path: root/plmp.cpp
diff options
context:
space:
mode:
authorSamuel Fadel <samuelfadel@gmail.com>2015-10-22 16:39:15 -0200
committerSamuel Fadel <samuelfadel@gmail.com>2015-10-22 16:39:15 -0200
commitad4fbabeca2cbdf4cb47f1a923183027494ab0a8 (patch)
tree4a9c16454ff4d802b23a8271f4005ee1846f7b1b /plmp.cpp
parent99ac0af03e1695ba4de2c42e949fce61b84850e5 (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.cpp22
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;
+}