From 02e2ebf10c30ca278dc8a85649c6a7db87858cde Mon Sep 17 00:00:00 2001 From: Samuel Fadel Date: Tue, 19 May 2015 18:54:20 -0300 Subject: Initial selection implementation. --- main.cpp | 59 ++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 32 insertions(+), 27 deletions(-) (limited to 'main.cpp') diff --git a/main.cpp b/main.cpp index a00d884..4fcff65 100644 --- a/main.cpp +++ b/main.cpp @@ -1,49 +1,54 @@ #include +#include #include -#include +#include #include "mp.h" #include "scatterplot.h" -arma::uvec getSample(arma::uword n) -{ - return arma::randi((arma::uword) 3*sqrt(n), arma::distr_param(0, n-1)); -} - -arma::mat getProjection(const arma::mat &X) -{ - arma::uword n = X.n_rows; - arma::uvec sampleIndices = getSample(n); - arma::mat Ys = arma::randn(sampleIndices.n_elem, 2); - Ys = mp::forceScheme(mp::dist(X.rows(sampleIndices)), Ys); - return mp::lamp(X, sampleIndices, Ys); -} - int main(int argc, char **argv) { QGuiApplication app(argc, argv); qmlRegisterType("PM", 1, 0, "Scatterplot"); - QQuickView view; + /*QQuickView view; QSurfaceFormat format = view.format(); format.setSamples(16); view.setFormat(format); view.setResizeMode(QQuickView::SizeRootObjectToView); - view.setSource(QUrl("qrc:///main_view.qml")); + view.setSource(QUrl("qrc:///main_view.qml"));*/ + QSurfaceFormat fmt; + fmt.setSamples(16); + QSurfaceFormat::setDefaultFormat(fmt); + QQmlApplicationEngine engine(QUrl("qrc:///main_view.qml")); if (argc > 1) { - arma::mat X; - X.load(argv[1], arma::raw_ascii); - - Scatterplot *plot = view.rootObject()->findChild("plot"); - arma::mat scatterData(X.n_rows, 3); - scatterData.cols(0, 1) = getProjection(X.cols(0, X.n_cols - 2)); - scatterData.col(2) = X.col(X.n_cols - 1); - plot->setData(scatterData); + arma::mat dataset; + dataset.load(argv[1], arma::raw_ascii); + arma::mat X = dataset.cols(0, dataset.n_cols - 2); + arma::vec labels = dataset.col(dataset.n_cols - 1); + + arma::uword n = dataset.n_rows; + arma::uword subsampleSize = (arma::uword) sqrt(n) * 3; + arma::uvec sampleIndices = arma::randi(subsampleSize, arma::distr_param(0, n-1)); + arma::mat Ys = arma::randn(subsampleSize, 2); + Ys = mp::forceScheme(mp::dist(X.rows(sampleIndices)), Ys); + + // Plot the subsample + Scatterplot *plot = engine.rootObjects()[0]->findChild("subsamplePlot"); + arma::mat subsampleData(subsampleSize, 3); + subsampleData.cols(0, 1) = Ys; + subsampleData.col(2) = labels(sampleIndices); + plot->setData(subsampleData); + + // Plot entire dataset + plot = engine.rootObjects()[0]->findChild("plot"); + arma::mat reducedData(n, 3); + reducedData.cols(0, 1) = mp::lamp(X, sampleIndices, Ys); + reducedData.col(2) = labels; + plot->setData(reducedData); } - view.show(); - return app.exec(); } -- cgit v1.2.3