UNPKG

pw-csp

Version:
107 lines (78 loc) 3.22 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>index.js - Documentation</title> <script src="scripts/prettify/prettify.js"></script> <script src="scripts/prettify/lang-css.js"></script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/ionicons.min.css"> <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> </head> <body> <input type="checkbox" id="nav-trigger" class="nav-trigger" /> <label for="nav-trigger" class="navicon-button x"> <div class="navicon"></div> </label> <label for="nav-trigger" class="overlay"></label> <nav> <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="CSP.html">CSP</a><ul class='methods'><li data-type='method'><a href="CSP.html#project">project</a></li></ul></li></ul> </nav> <div id="main"> <h1 class="page-title">index.js</h1> <section> <article> <pre class="prettyprint source linenums"><code>var numeric = require('numeric'); var math = require('mathjs'); var stat = require('pw-stat'); /** * Creates a new CSP object * @constructor * @param {number[][]} class1 - Data samples for class 1. Rows should be samples, columns should be signals. * @param {number[][]} class2 - Data samples for class 2. Rows should be samples, columns should be signals. */ function CSP(class1, class2) { var cov1 = stat.cov(class1); var cov2 = stat.cov(class2); this.V = numeric.eig(math.multiply(math.inv(math.add(cov1, cov2)), cov1)).E.x; } /** * Projects data and reduces to given number of dimensions * @param {number[][]} data - Data points to be projected. Rows should be samples, columns should be signals. * @param {number} [dimensions] - Number of dimensions to be returned. Can range from 1 to number of signals. Defaults to number of signals. * @returns {number[][]} Projected data. Rows are samples, columns are dimensions sorted by descending importance. */ CSP.prototype.project = function (data, dimensions) { var projected = math.multiply(data, this.V); // Default number of dimensions is all of them, which is number of columns in data dimensions = typeof dimensions !== "undefined" ? dimensions : projected[0].length; var reduced = []; for (var r = 0; r &lt; projected.length; r++) { reduced.push([]); for (var i = 0; i &lt; dimensions; i++) { // Start at left and right ends of matrix columns are work towards center if (i % 2 == 0) { var column = i / 2; } else { var column = projected[0].length - (i + 1) / 2; } reduced[r].push(projected[r][column]); } } return reduced; } module.exports = CSP;</code></pre> </article> </section> </div> <br class="clear"> <footer> Documentation generated at Thu Nov 16 2017 22:31:54 GMT-0600 (Central Standard Time) </footer> <script>prettyPrint();</script> <script src="scripts/linenumber.js"></script> </body> </html>