From 179cbb80afb6c08ad464e649a33cadf90d810f59 Mon Sep 17 00:00:00 2001 From: Daniel Kostro Date: Tue, 27 Jan 2015 11:03:01 +0100 Subject: [PATCH] Release v0.2.0 --- bower.json | 2 +- dist/ml.js | 888 ++++++++++++++++++++++++++++++++++++++++++++++++- dist/ml.min.js | 6 +- package.json | 2 +- 4 files changed, 890 insertions(+), 8 deletions(-) diff --git a/bower.json b/bower.json index 2b89296..83d1787 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "ml", - "version": "0.1.4", + "version": "0.2.0", "main": [ "dist/ml.js", "dist/ml.min.js" diff --git a/dist/ml.js b/dist/ml.js index 922e6bb..5118547 100644 --- a/dist/ml.js +++ b/dist/ml.js @@ -1,6 +1,6 @@ /** * ml - Machine learning tools - * @version v0.1.4 + * @version v0.2.0 * @link https://github.com/mljs/ml * @license MIT */ @@ -13,17 +13,20 @@ Core utilities Math */ var Math = exports.Math = {}; - Math.Matrix = exports.Matrix = require('ml-matrix'); Math.Distance = require('ml-distance'); +var Stat = exports.Stat = {}; +Stat.array = require('ml-stat/array'); +Stat.matrix = require('ml-stat/matrix'); + /* Neural networks */ var nn = exports.nn = {}; nn.SOM = require('ml-som'); -},{"ml-distance":52,"ml-matrix":54,"ml-som":56}],2:[function(require,module,exports){ +},{"ml-distance":52,"ml-matrix":54,"ml-som":56,"ml-stat/array":59,"ml-stat/matrix":60}],2:[function(require,module,exports){ module.exports = function additiveSymmetric(a, b) { var i = 0, ii = a.length, @@ -4324,5 +4327,884 @@ NodeSquare.prototype.getPosition = function getPosition(element) { }; module.exports = NodeSquare; +},{}],59:[function(require,module,exports){ +'use strict'; +// https://github.com/accord-net/framework/blob/development/Sources/Accord.Statistics/Tools.cs + +function max(values) { + var max = -Infinity, l=values.length; + for(var i=0; i max) max = values[i]; + } + return max; +} + +function min(values) { + var min = Infinity, l=values.length; + for(var i=0; i= 0) + itemCount[index]++; + else { + itemArray[count] = values[i]; + itemCount[count] = 1; + count++; + } + } + + var maxValue = 0, maxIndex = 0; + for (i = 0; i < count; i++) { + if (itemCount[i] > maxValue) { + maxValue = itemCount[i]; + maxIndex = i; + } + } + + return itemArray[maxIndex]; +} + +function covariance(vector1, vector2, unbiased) { + if (typeof(unbiased) === 'undefined') unbiased = true; + var mean1 = mean(vector1); + var mean2 = mean(vector2); + + if (vector1.length !== vector2.length) + throw "Vectors do not have the same dimensions"; + + var cov = 0, l = vector1.length; + for (var i = 0; i < l; i++) { + var x = vector1[i] - mean1; + var y = vector2[i] - mean2; + cov += x * y; + } + + if (unbiased) + return cov / (l - 1); + else + return cov / l; +} + +function skewness(values, unbiased) { + if (typeof(unbiased) === 'undefined') unbiased = true; + var theMean = mean(values); + + var s2 = 0, s3 = 0, l = values.length; + for (var i = 0; i < l; i++) { + var dev = values[i] - theMean; + s2 += dev * dev; + s3 += dev * dev * dev; + } + var m2 = s2 / l; + var m3 = s3 / l; + + var g = m3 / (Math.pow(m2, 3 / 2.0)); + if (unbiased) { + var a = Math.sqrt(l * (l - 1)); + var b = l - 2; + return (a / b) * g; + } + else { + return g; + } +} + +function kurtosis(values, unbiased) { + if (typeof(unbiased) === 'undefined') unbiased = true; + var theMean = mean(values); + var n = values.length, s2 = 0, s4 = 0; + + for (var i = 0; i < n; i++) { + var dev = values[i] - theMean; + s2 += dev * dev; + s4 += dev * dev * dev * dev; + } + var m2 = s2 / n; + var m4 = s4 / n; + + if (unbiased) { + var v = s2 / (n - 1); + var a = (n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3)); + var b = s4 / (v * v); + var c = ((n - 1) * (n - 1)) / ((n - 2) * (n - 3)); + + return a * b - 3 * c; + } + else { + return m4 / (m2 * m2) - 3; + } +} + +function entropy(values, eps) { + if (typeof(eps) === 'undefined') eps = 0; + var sum = 0, l = values.length; + for (var i = 0; i < l; i++) + sum += values[i] * Math.log(values[i] + eps); + return -sum; +} + +function weightedMean(values, weights) { + var sum = 0, l = values.length; + for (var i = 0; i < l; i++) + sum += values[i] * weights[i]; + return sum; +} + +function weightedStandardDeviation(values, weights) { + return Math.sqrt(weightedVariance(values, weights)); +} + +function weightedVariance(values, weights) { + var theMean = weightedMean(values, weights); + var vari = 0, l = values.length; + var a = 0, b = 0; + + for (var i = 0; i < l; i++) { + var z = values[i] - theMean; + var w = weights[i]; + + vari += w * (z * z); + b += w; + a += w * w; + } + + return vari * (b / (b * b - a)); +} + +function center(values, inPlace) { + if (typeof(inPlace) === 'undefined') inPlace = false; + + var result = values; + if (!inPlace) + result = values.slice(); + + var theMean = mean(result), l = result.length; + for (var i = 0; i < l; i++) + result[i] -= theMean; +} + +function standardize(values, standardDev, inPlace) { + if (typeof(standardDev) === 'undefined') standardDev = standardDeviation(values); + if (typeof(inPlace) === 'undefined') inPlace = false; + var l = values.length; + var result = inPlace ? values : new Array(l); + for (var i = 0; i < l; i++) + result[i] = values[i] / standardDev; + return result; +} + +function cumulativeSum(array) { + var l = array.length; + var result = new Array(l); + result[0] = array[0]; + for (var i = 1; i < l; i++) + result[i] = result[i - 1] + array[i]; + return result; +} + +module.exports = { + min: min, + max: max, + mean: mean, + geometricMean: geometricMean, + logGeometricMean: logGeometricMean, + grandMean: grandMean, + truncatedMean: truncatedMean, + contraHarmonicMean: contraHarmonicMean, + standardDeviation: standardDeviation, + standardError: standardError, + median: median, + quartiles: quartiles, + variance: variance, + pooledStandardDeviation: pooledStandardDeviation, + pooledVariance: pooledVariance, + mode: mode, + covariance: covariance, + skewness: skewness, + kurtosis: kurtosis, + entropy: entropy, + weightedMean: weightedMean, + weightedStandardDeviation: weightedStandardDeviation, + weightedVariance: weightedVariance, + center: center, + standardize: standardize, + cumulativeSum: cumulativeSum +}; + +},{}],60:[function(require,module,exports){ +'use strict'; +// https://github.com/accord-net/framework/blob/development/Sources/Accord.Statistics/Tools.cs + +function entropy(matrix, eps) { + if (typeof(eps) === 'undefined') { + eps = 0; + } + var sum = 0, + l1 = matrix.length, + l2 = matrix[0].length; + for (var i = 0; i < l1; i++) { + for (var j = 0; j < l2; j++) { + sum += matrix[i][j] * Math.log(matrix[i][j] + eps); + } + } + return -sum; +} + +function mean(matrix, dimension) { + if (typeof(dimension) === 'undefined') { + dimension = 0; + } + var rows = matrix.length, + cols = matrix[0].length, + theMean, N, i, j; + + if (dimension === -1) { + theMean = [0]; + N = rows * cols; + for (i = 0; i < rows; i++) { + for (j = 0; j < cols; j++) { + theMean[0] += matrix[i][j]; + } + } + theMean[0] /= N; + } else if (dimension === 0) { + theMean = new Array(cols); + N = rows; + for (j = 0; j < cols; j++) { + theMean[j] = 0; + for (i = 0; i < rows; i++) { + theMean[j] += matrix[i][j]; + } + theMean[j] /= N; + } + } else if (dimension === 1) { + theMean = new Array(rows); + N = cols; + for (j = 0; j < rows; j++) { + theMean[j] = 0; + for (i = 0; i < cols; i++) { + theMean[j] += matrix[j][i]; + } + theMean[j] /= N; + } + } else { + throw new Error('Invalid dimension'); + } + return theMean; +} + +function standardDeviation(matrix, means, unbiased) { + var vari = variance(matrix, means, unbiased), l = vari.length; + for (var i = 0; i < l; i++) { + vari[i] = Math.sqrt(vari[i]); + } + return vari; +} + +function variance(matrix, means, unbiased) { + if (typeof(unbiased) === 'undefined') { + unbiased = true; + } + means = means || mean(matrix); + var rows = matrix.length; + if (rows === 0) return []; + var cols = matrix[0].length; + var vari = new Array(cols); + + for (var j = 0; j < cols; j++) { + var sum1 = 0, sum2 = 0, x = 0; + for (var i = 0; i < rows; i++) { + x = matrix[i][j] - means[j]; + sum1 += x; + sum2 += x * x; + } + if (unbiased) { + vari[j] = (sum2 - ((sum1 * sum1) / rows)) / (rows - 1); + } else { + vari[j] = (sum2 - ((sum1 * sum1) / rows)) / rows; + } + } + return vari; +} + +function median(matrix) { + var rows = matrix.length, cols = matrix[0].length; + var medians = new Array(cols); + + for (var i = 0; i < cols; i++) { + var data = new Array(rows); + for (var j = 0; j < rows; j++) { + data[j] = matrix[j][i]; + } + data.sort(); + var N = data.length; + if (N % 2 === 0) { + medians[i] = (data[N / 2] + data[(N / 2) - 1]) * 0.5; + } else { + medians[i] = data[Math.floor(N / 2)]; + } + } + return medians; +} + +function mode(matrix) { + var rows = matrix.length, + cols = matrix[0].length, + modes = new Array(cols), + i, j; + for (i = 0; i < cols; i++) { + var itemCount = new Array(rows); + for (var k = 0; k < rows; k++) { + itemCount[k] = 0; + } + var itemArray = new Array(rows); + var count = 0; + + for (j = 0; j < rows; j++) { + var index = itemArray.indexOf(matrix[j][i]); + if (index >= 0) { + itemCount[index]++; + } else { + itemArray[count] = matrix[j][i]; + itemCount[count] = 1; + count++; + } + } + + var maxValue = 0, maxIndex = 0; + for (j = 0; j < count; j++) { + if (itemCount[j] > maxValue) { + maxValue = itemCount[j]; + maxIndex = j; + } + } + + modes[i] = itemArray[maxIndex]; + } + return modes; +} + +function skewness(matrix, unbiased) { + if (typeof(unbiased) === 'undefined') unbiased = true; + var means = mean(matrix); + var n = matrix.length, l = means.length; + var skew = new Array(l); + + for (var j = 0; j < l; j++) { + var s2 = 0, s3 = 0; + for (var i = 0; i < n; i++) { + var dev = matrix[i][j] - means[j]; + s2 += dev * dev; + s3 += dev * dev * dev; + } + + var m2 = s2 / n; + var m3 = s3 / n; + var g = m3 / Math.pow(m2, 3 / 2); + + if (unbiased) { + var a = Math.sqrt(n * (n - 1)); + var b = n - 2; + skew[j] = (a / b) * g; + } else { + skew[j] = g; + } + } + return skew; +} + +function kurtosis(matrix, unbiased) { + if (typeof(unbiased) === 'undefined') unbiased = true; + var means = mean(matrix); + var n = matrix.length, m = matrix[0].length; + var kurt = new Array(m); + + for (var j = 0; j < m; j++) { + var s2 = 0, s4 = 0; + for (var i = 0; i < n; i++) { + var dev = matrix[i][j] - means[j]; + s2 += dev * dev; + s4 += dev * dev * dev * dev; + } + var m2 = s2 / n; + var m4 = s4 / n; + + if (unbiased) { + var v = s2 / (n - 1); + var a = (n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3)); + var b = s4 / (v * v); + var c = ((n - 1) * (n - 1)) / ((n - 2) * (n - 3)); + kurt[j] = a * b - 3 * c; + } else { + kurt[j] = m4 / (m2 * m2) - 3; + } + } + return kurt; +} + +function standardError(matrix) { + var samples = matrix.length; + var standardDeviations = standardDeviation(matrix), l = standardDeviations.length; + var standardErrors = new Array(l); + var sqrtN = Math.sqrt(samples); + + for (var i = 0; i < l; i++) { + standardErrors[i] = standardDeviations[i] / sqrtN; + } + return standardErrors; +} + +function covariance(matrix, dimension) { + return scatter(matrix, undefined, dimension); +} + +function scatter(matrix, divisor, dimension) { + if (typeof(dimension) === 'undefined') { + dimension = 0; + } + if (typeof(divisor) === 'undefined') { + if (dimension === 0) { + divisor = matrix.length - 1; + } else if (dimension === 1) { + divisor = matrix[0].length - 1; + } + } + var means = mean(matrix, dimension), + rows = matrix.length; + if (rows === 0) { + return [[]]; + } + var cols = matrix[0].length, + cov, i, j, s, k; + + if (dimension === 0) { + cov = new Array(cols); + for (i = 0; i < cols; i++) { + cov[i] = new Array(cols); + } + for (i = 0; i < cols; i++) { + for (j = i; j < cols; j++) { + s = 0; + for (k = 0; k < rows; k++) { + s += (matrix[k][j] - means[j]) * (matrix[k][i] - means[i]); + } + s /= divisor; + cov[i][j] = s; + cov[j][i] = s; + } + } + } else if (dimension === 1) { + cov = new Array(rows); + for (i = 0; i < rows; i++) { + cov[i] = new Array(rows); + } + for (i = 0; i < rows; i++) { + for (j = i; j < rows; j++) { + s = 0; + for (k = 0; k < cols; k++) { + s += (matrix[j][k] - means[j]) * (matrix[i][k] - means[i]); + } + s /= divisor; + cov[i][j] = s; + cov[j][i] = s; + } + } + } else { + throw new Error('Invalid dimension'); + } + + return cov; +} + +function correlation(matrix) { + var means = mean(matrix), + standardDeviations = standardDeviation(matrix, true, means), + scores = zScores(matrix, means, standardDeviations), + rows = matrix.length, + cols = matrix[0].length, + i, j; + + var cor = new Array(cols); + for (i = 0; i < cols; i++) { + cor[i] = new Array(cols); + } + for (i = 0; i < cols; i++) { + for (j = i; j < cols; j++) { + var c = 0; + for (var k = 0, l = scores.length; k < l; k++) { + c += scores[k][j] * scores[k][i]; + } + c /= rows - 1; + cor[i][j] = c; + cor[j][i] = c; + } + } + return cor; +} + +function zScores(matrix, means, standardDeviations) { + means = means || mean(matrix); + if (typeof(standardDeviations) === 'undefined') standardDeviations = standardDeviation(matrix, true, means); + return standardize(center(matrix, means, false), standardDeviations, true); +} + +function center(matrix, means, inPlace) { + means = means || mean(matrix); + var result = matrix, + l = matrix.length, + i, j, jj; + + if (!inPlace) { + result = new Array(l); + for (i = 0; i < l; i++) { + result[i] = new Array(matrix[i].length); + } + } + + for (i = 0; i < l; i++) { + var row = result[i]; + for (j = 0, jj = row.length; j < jj; j++) { + row[j] = matrix[i][j] - means[j]; + } + } + return result; +} + +function standardize(matrix, standardDeviations, inPlace) { + if (typeof(standardDeviations) === 'undefined') standardDeviations = standardDeviation(matrix); + var result = matrix, + l = matrix.length, + i, j, jj; + + if (!inPlace) { + result = new Array(l); + for (i = 0; i < l; i++) { + result[i] = new Array(matrix[i].length); + } + } + + for (i = 0; i < l; i++) { + var resultRow = result[i]; + var sourceRow = matrix[i]; + for (j = 0, jj = resultRow.length; j < jj; j++) { + if (standardDeviations[j] !== 0 && !isNaN(standardDeviations[j])) { + resultRow[j] = sourceRow[j] / standardDeviations[j]; + } + } + } + return result; +} + +function weightedVariance(matrix, weights) { + var means = mean(matrix); + var rows = matrix.length; + if (rows === 0) return []; + var cols = matrix[0].length; + var vari = new Array(cols); + + for (var j = 0; j < cols; j++) { + var sum = 0; + var a = 0, b = 0; + + for (var i = 0; i < rows; i++) { + var z = matrix[i][j] - means[j]; + var w = weights[i]; + + sum += w * (z * z); + b += w; + a += w * w; + } + + vari[j] = sum * (b / (b * b - a)); + } + + return vari; +} + +function weightedMean(matrix, weights, dimension) { + if (typeof(dimension) === 'undefined') { + dimension = 0; + } + var rows = matrix.length; + if (rows === 0) return []; + var cols = matrix[0].length, + means, i, ii, j, w, row; + + if (dimension === 0) { + means = new Array(cols); + for (i = 0; i < cols; i++) { + means[i] = 0; + } + for (i = 0; i < rows; i++) { + row = matrix[i]; + w = weights[i]; + for (j = 0; j < cols; j++) { + means[j] += row[j] * w; + } + } + } else if (dimension === 1) { + means = new Array(rows); + for (i = 0; i < rows; i++) { + means[i] = 0; + } + for (j = 0; j < rows; j++) { + row = matrix[j]; + w = weights[j]; + for (i = 0; i < cols; i++) { + means[j] += row[i] * w; + } + } + } else { + throw new Error('Invalid dimension'); + } + + var weightSum = sum(weights); + if (weightSum !== 0) { + for (i = 0, ii = means.length; i < ii; i++) { + means[i] /= weightSum; + } + } + return means; +} + +function weightedCovariance(matrix, weights, means, dimension) { + dimension = dimension || 0; + means = means || weightedMean(matrix, weights, dimension); + var s1 = 0, s2 = 0; + for (var i = 0, ii = weights.length; i < ii; i++) { + s1 += weights[i]; + s2 += weights[i] * weights[i]; + } + var factor = s1 / (s1 * s1 - s2); + return weightedScatter(matrix, weights, means, factor, dimension); +} + +function weightedScatter(matrix, weights, means, factor, dimension) { + dimension = dimension || 0; + means = means || weightedMean(matrix, weights, dimension); + if (typeof(factor) === 'undefined') { + factor = 1; + } + var rows = matrix.length; + if (rows === 0) { + return [[]]; + } + var cols = matrix[0].length, + cov, i, j, k, s; + + if (dimension === 0) { + cov = new Array(cols); + for (i = 0; i < cols; i++) { + cov[i] = new Array(cols); + } + for (i = 0; i < cols; i++) { + for (j = i; j < cols; j++) { + s = 0; + for (k = 0; k < rows; k++) { + s += weights[k] * (matrix[k][j] - means[j]) * (matrix[k][i] - means[i]); + } + cov[i][j] = s * factor; + cov[j][i] = s * factor; + } + } + } else if (dimension === 1) { + cov = new Array(rows); + for (i = 0; i < rows; i++) { + cov[i] = new Array(rows); + } + for (i = 0; i < rows; i++) { + for (j = i; j < rows; j++) { + s = 0; + for (k = 0; k < cols; k++) { + s += weights[k] * (matrix[j][k] - means[j]) * (matrix[i][k] - means[i]); + } + cov[i][j] = s * factor; + cov[j][i] = s * factor; + } + } + } else { + throw new Error('Invalid dimension'); + } + + return cov; +} + +// private +function sum(vector) { + var sum = 0, l = vector.length; + for (var i = 0; i < l; i++) { + sum += vector[i]; + } + return sum; +} + +module.exports = { + entropy: entropy, + mean: mean, + standardDeviation: standardDeviation, + variance: variance, + median: median, + mode: mode, + skewness: skewness, + kurtosis: kurtosis, + standardError: standardError, + covariance: covariance, + scatter: scatter, + correlation: correlation, + zScores: zScores, + center: center, + standardize: standardize, + weightedVariance: weightedVariance, + weightedMean: weightedMean, + weightedCovariance: weightedCovariance, + weightedScatter: weightedScatter +}; + },{}]},{},[1])(1) }); \ No newline at end of file diff --git a/dist/ml.min.js b/dist/ml.min.js index 0b4050c..37beb42 100644 --- a/dist/ml.min.js +++ b/dist/ml.min.js @@ -1,3 +1,3 @@ -// ml@v0.1.4, MIT licensed. https://github.com/mljs/ml -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r;"undefined"!=typeof window?r=window:"undefined"!=typeof global?r=global:"undefined"!=typeof self&&(r=self),r.ML=t()}}(function(){var define,module,exports;return function t(r,o,n){function i(s,a){if(!o[s]){if(!r[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(e)return e(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var f=o[s]={exports:{}};r[s][0].call(f.exports,function(t){var o=r[s][1][t];return i(o?o:t)},f,f.exports,t,r,o,n)}return o[s].exports}for(var e="function"==typeof require&&require,s=0;so;o++)i+=(t[o]-r[o])*(t[o]-r[o])*(t[o]+r[o])/(t[o]*r[o]);return 2*i}},{}],3:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0,e=0,s=0;o>s;s++)e=Math.abs(t[s]-r[s]),i+=e,e>n&&(n=e);return(n+i)/2}},{}],4:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0;o>i;i++)n+=Math.sqrt(t[i]*r[i]);return-Math.log(n)}},{}],5:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0;o>i;i++)n+=Math.abs(t[i]-r[i])/(t[i]+r[i]);return n}},{}],6:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0,e=0;o>e;e++)i=Math.abs(t[e]-r[e]),i>n&&(n=i);return n}},{}],7:[function(t,r){r.exports=function(t,r){for(var o=0,n=t.length,i=0;n>o;o++)i+=Math.sqrt((t[o]-r[o])*(t[o]-r[o])/((t[o]+r[o])*(t[o]+r[o])));return 2*i}},{}],8:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0,e=0,s=0;o>s;s++)n+=t[s]*r[s],i+=t[s]*t[s],e+=r[s]*r[s];return n/(Math.sqrt(i)*Math.sqrt(e))}},{}],9:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0,e=0;o>e;e++)n+=Math.min(t[e],r[e]),i+=t[e]+r[e];return 1-2*n/i}},{}],10:[function(t,r){var o=t("./czekanowski");r.exports=function(t,r){return 1-o(t,r)}},{"./czekanowski":9}],11:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0,e=0,s=0;o>s;s++)n+=t[s]*t[s],i+=r[s]*r[s],e+=(t[s]-r[s])*(t[s]-r[s]);return e/(n+i)}},{}],12:[function(t,r){var o=t("./dice");r.exports=function(t,r){return 1-o(t,r)}},{"./dice":11}],13:[function(t,r){r.exports=function(t,r){for(var o=0,n=t.length,i=0;n>o;o++)i+=(t[o]-r[o])*(t[o]-r[o])/((t[o]+r[o])*(t[o]+r[o]));return 2*i}},{}],14:[function(t,r){var o=t("./squared-euclidean");r.exports=function(t,r){return Math.sqrt(o(t,r))}},{"./squared-euclidean":44}],15:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0;o>i;i++)n+=Math.sqrt(t[i]*r[i]);return n}},{}],16:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0;o>i;i++)n+=Math.abs(t[i]-r[i]);return n/o}},{}],17:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0;o>i;i++)n+=t[i]*r[i]/(t[i]+r[i]);return 2*n}},{}],18:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0;o>i;i++)n+=Math.sqrt(t[i]*r[i]);return 2*Math.sqrt(1-n)}},{}],19:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0;o>i;i++)n+=t[i]*r[i];return n}},{}],20:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0;o>i;i++)n+=Math.min(t[i],r[i]);return 1-n}},{}],21:[function(t,r){var o=t("./intersection");r.exports=function(t,r){return 1-o(t,r)}},{"./intersection":20}],22:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0,e=0,s=0,a=0;o>a;a++)n+=t[a]*r[a],i+=t[a]*t[a],e+=r[a]*r[a],s+=(t[a]-r[a])*(t[a]-r[a]);return s/(i+e-n)}},{}],23:[function(t,r){var o=t("./jaccard");r.exports=function(t,r){return 1-o(t,r)}},{"./jaccard":22}],24:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0;o>i;i++)n+=(t[i]-r[i])*Math.log(t[i]/r[i]);return n}},{}],25:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0;o>i;i++)n+=(t[i]*Math.log(t[i])+r[i]*Math.log(r[i]))/2-(t[i]+r[i])/2*Math.log((t[i]+r[i])/2);return n}},{}],26:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0,e=0;o>e;e++)n+=t[e]*Math.log(2*t[e]/(t[e]+r[e])),i+=r[e]*Math.log(2*r[e]/(t[e]+r[e]));return(n+i)/2}},{}],27:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0;o>i;i++)n+=t[i]*Math.log(2*t[i]/(t[i]+r[i]));return n}},{}],28:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0,e=0;o>e;e++)n+=Math.abs(t[e]-r[e]),i+=Math.min(t[e],r[e]);return n/i}},{}],29:[function(t,r){var o=t("./kulczynski");r.exports=function(t,r){return 1/o(t,r)}},{"./kulczynski":28}],30:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0;o>i;i++)n+=t[i]*Math.log(t[i]/r[i]);return n}},{}],31:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0,e=0,s=0;o>s;s++)n+=t[s]*r[s],i+=t[s]*t[s],e+=r[s]*r[s];return n/(i+e-n)}},{}],32:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0;o>i;i++)n+=Math.pow(t[i]*t[i]-r[i]*r[i],2)/(2*Math.pow(t[i]*r[i],1.5));return n}},{}],33:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0;o>i;i++)n+=Math.log(Math.abs(t[i]-r[i])+1);return n}},{}],34:[function(t,r){r.exports=function(t,r){for(var o=0,n=t.length,i=0;n>o;o++)i+=Math.abs(t[o]-r[o]);return i}},{}],35:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0;o>i;i++)n+=Math.sqrt(t[i]*r[i]);return Math.sqrt(2-2*n)}},{}],36:[function(t,r){r.exports=function(t,r,o){for(var n=0,i=t.length,e=0;i>n;n++)e+=Math.pow(Math.abs(t[n]-r[n]),o);return Math.pow(e,1/o)}},{}],37:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0,e=0;o>e;e++)n+=Math.min(t[e],r[e]),i+=t[e]+r[e];return 1-n/i}},{}],38:[function(t,r){r.exports=function(t,r){for(var o=0,n=t.length,i=0;n>o;o++)i+=(t[o]-r[o])*(t[o]-r[o])/t[o];return i}},{}],39:[function(t,r){r.exports=function(t,r){for(var o=0,n=t.length,i=0;n>o;o++)i+=(t[o]-r[o])*(t[o]-r[o])/r[o];return i}},{}],40:[function(t,r){r.exports=function(t,r){for(var o=0,n=t.length,i=0;n>o;o++)i+=(t[o]-r[o])*(t[o]-r[o])/(t[o]+r[o]);return 2*i}},{}],41:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0,e=0;o>e;e++)n+=Math.min(t[e],r[e]),i+=Math.max(t[e],r[e]);return n/i}},{}],42:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0,e=0;o>e;e++)n+=Math.abs(t[e]-r[e]),i+=Math.max(t[e],r[e]);return n/i}},{}],43:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0,e=0;o>e;e++)n+=Math.abs(t[e]-r[e]),i+=t[e]+r[e];return n/i}},{}],44:[function(t,r){r.exports=function(t,r){for(var o=0,n=t.length,i=0;n>o;o++)i+=(t[o]-r[o])*(t[o]-r[o]);return i}},{}],45:[function(t,r){r.exports=function(t,r){for(var o=0,n=t.length,i=0;n>o;o++)i+=(t[o]-r[o])*(t[o]-r[o])/(t[o]+r[o]);return i}},{}],46:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0;o>i;i++)n+=(Math.sqrt(t[i])-Math.sqrt(r[i]))*(Math.sqrt(t[i])-Math.sqrt(r[i]));return n}},{}],47:[function(t,r){var o=t("./squaredChord");r.exports=function(t,r){return 1-o(t,r)}},{"./squaredChord":46}],48:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0;o>i;i++)n+=(t[i]+r[i])/2*Math.log((t[i]+r[i])/(2*Math.sqrt(t[i]*r[i])));return n}},{}],49:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0,e=0,s=0;o>s;s++)n+=t[s],i+=r[s],e+=Math.min(t[s],r[s]);return(n+i-2*e)/(n+i-e)}},{}],50:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0;o>i;i++)n+=t[i]*Math.log(2*t[i]/(t[i]+r[i]))+r[i]*Math.log(2*r[i]/(t[i]+r[i]));return n}},{}],51:[function(t,r){r.exports=function(t,r){for(var o=t.length,n=0,i=0;o>i;i++)n+=1-Math.min(t[i],r[i])/Math.max(t[i],r[i]);return n}},{}],52:[function(t,r,o){o.euclidean=t("./dist/euclidean"),o.squaredEuclidean=t("./dist/squared-euclidean"),o.manhattan=t("./dist/manhattan"),o.minkowski=t("./dist/minkowski"),o.chebyshev=t("./dist/chebyshev"),o.sorensen=t("./dist/sorensen"),o.gower=t("./dist/gower"),o.soergel=t("./dist/soergel"),o.kulczynski=t("./dist/kulczynski"),o.kulczynskiS=t("./dist/kulczynskiS"),o.canberra=t("./dist/canberra"),o.lorentzian=t("./dist/lorentzian"),o.intersection=t("./dist/intersection"),o.intersectionS=t("./dist/intersectionS"),o.waveHedges=t("./dist/waveHedges"),o.czekanowski=t("./dist/czekanowski"),o.czekanowskiS=t("./dist/czekanowskiS"),o.motyka=t("./dist/motyka"),o.kulczynskiS=t("./dist/kulczynskiS"),o.ruzicka=t("./dist/ruzicka"),o.tanimoto=t("./dist/tanimoto"),o.innerProduct=t("./dist/innerProduct"),o.harmonicMean=t("./dist/harmonicMean"),o.cosine=t("./dist/cosine"),o.kumarHassebrook=t("./dist/kumarHassebrook"),o.jaccard=t("./dist/jaccard"),o.jaccardS=t("./dist/jaccardS"),o.dice=t("./dist/dice"),o.diceS=t("./dist/diceS"),o.fidelity=t("./dist/fidelity"),o.bhattacharyya=t("./dist/bhattacharyya"),o.hellinger=t("./dist/hellinger"),o.matusita=t("./dist/matusita"),o.squaredChord=t("./dist/squaredChord"),o.squaredChordS=t("./dist/squaredChordS"),o.pearson=t("./dist/pearson"),o.neyman=t("./dist/neyman"),o.squared=t("./dist/squared"),o.probabilisticSymmetric=t("./dist/probabilisticSymmetric"),o.divergence=t("./dist/divergence"),o.clark=t("./dist/clark"),o.additiveSymmetric=t("./dist/additiveSymmetric"),o.kullbackLeibler=t("./dist/kullbackLeibler"),o.jeffreys=t("./dist/jeffreys"),o.kdivergence=t("./dist/kdivergence"),o.topsoe=t("./dist/topsoe"),o.jensenShannon=t("./dist/jensenShannon"),o.jensenDifference=t("./dist/jensenDifference"),o.taneja=t("./dist/taneja"),o.kumarJohnson=t("./dist/kumarJohnson"),o.avg=t("./dist/avg")},{"./dist/additiveSymmetric":2,"./dist/avg":3,"./dist/bhattacharyya":4,"./dist/canberra":5,"./dist/chebyshev":6,"./dist/clark":7,"./dist/cosine":8,"./dist/czekanowski":9,"./dist/czekanowskiS":10,"./dist/dice":11,"./dist/diceS":12,"./dist/divergence":13,"./dist/euclidean":14,"./dist/fidelity":15,"./dist/gower":16,"./dist/harmonicMean":17,"./dist/hellinger":18,"./dist/innerProduct":19,"./dist/intersection":20,"./dist/intersectionS":21,"./dist/jaccard":22,"./dist/jaccardS":23,"./dist/jeffreys":24,"./dist/jensenDifference":25,"./dist/jensenShannon":26,"./dist/kdivergence":27,"./dist/kulczynski":28,"./dist/kulczynskiS":29,"./dist/kullbackLeibler":30,"./dist/kumarHassebrook":31,"./dist/kumarJohnson":32,"./dist/lorentzian":33,"./dist/manhattan":34,"./dist/matusita":35,"./dist/minkowski":36,"./dist/motyka":37,"./dist/neyman":38,"./dist/pearson":39,"./dist/probabilisticSymmetric":40,"./dist/ruzicka":41,"./dist/soergel":42,"./dist/sorensen":43,"./dist/squared":45,"./dist/squared-euclidean":44,"./dist/squaredChord":46,"./dist/squaredChordS":47,"./dist/taneja":48,"./dist/tanimoto":49,"./dist/topsoe":50,"./dist/waveHedges":51}],53:[function(t,r){"use strict";function o(t){if(t=M.checkMatrix(t),!t.isSquare())throw new Error("Matrix is not a square matrix");var r,o,a=t.columns,u=M.zeros(a,a),f=new Array(a),c=new Array(a),l=t;if(t.isSymmetric()){for(r=0;a>r;r++)for(o=0;a>o;o++)u[r][o]=l[r][o];n(a,c,f,u),i(a,c,f,u)}else{var d=M.zeros(a,a),m=new Array(a);for(o=0;a>o;o++)for(r=0;a>r;r++)d[r][o]=l[r][o];e(a,d,m,u),s(a,c,f,u,d)}return new h(a,c,f,u)}function n(t,r,o,n){var i,e,s,a,h,u,f,c;for(h=0;t>h;h++)o[h]=n[t-1][h];for(a=t-1;a>0;a--){for(c=0,s=0,u=0;a>u;u++)c+=Math.abs(o[u]);if(0===c)for(r[a]=o[a-1],h=0;a>h;h++)o[h]=n[a-1][h],n[a][h]=0,n[h][a]=0;else{for(u=0;a>u;u++)o[u]/=c,s+=o[u]*o[u];for(i=o[a-1],e=Math.sqrt(s),i>0&&(e=-e),r[a]=c*e,s-=i*e,o[a-1]=i-e,h=0;a>h;h++)r[h]=0;for(h=0;a>h;h++){for(i=o[h],n[h][a]=i,e=r[h]+n[h][h]*i,u=h+1;a-1>=u;u++)e+=n[u][h]*o[u],r[u]+=n[u][h]*i;r[h]=e}for(i=0,h=0;a>h;h++)r[h]/=s,i+=r[h]*o[h];for(f=i/(s+s),h=0;a>h;h++)r[h]-=f*o[h];for(h=0;a>h;h++){for(i=o[h],e=r[h],u=h;a-1>=u;u++)n[u][h]-=i*r[u]+e*o[u];o[h]=n[a-1][h],n[a][h]=0}}o[a]=s}for(a=0;t-1>a;a++){if(n[t-1][a]=n[a][a],n[a][a]=1,s=o[a+1],0!==s){for(u=0;a>=u;u++)o[u]=n[u][a+1]/s;for(h=0;a>=h;h++){for(e=0,u=0;a>=u;u++)e+=n[u][a+1]*n[u][h];for(u=0;a>=u;u++)n[u][h]-=e*o[u]}}for(u=0;a>=u;u++)n[u][a+1]=0}for(h=0;t>h;h++)o[h]=n[t-1][h],n[t-1][h]=0;n[t-1][t-1]=1,r[0]=0}function i(t,r,o,n){var i,e,s,a,h,u,f,c,l,d,m,p,v,w,y,M,x;for(s=1;t>s;s++)r[s-1]=r[s];r[t-1]=0;var b=0,k=0,S=Math.pow(2,-52);for(u=0;t>u;u++){for(k=Math.max(k,Math.abs(o[u])+Math.abs(r[u])),f=u;t>f&&!(Math.abs(r[f])<=S*k);)f++;if(f>u){x=0;do{for(x+=1,i=o[u],c=(o[u+1]-i)/(2*r[u]),l=g(c,1),0>c&&(l=-l),o[u]=r[u]/(c+l),o[u+1]=r[u]*(c+l),d=o[u+1],e=i-o[u],s=u+2;t>s;s++)o[s]-=e;for(b+=e,c=o[f],m=1,p=m,v=m,w=r[u+1],y=0,M=0,s=f-1;s>=u;s--)for(v=p,p=m,M=y,i=m*r[s],e=m*c,l=g(c,r[s]),r[s+1]=y*l,y=r[s]/l,m=c/l,c=m*o[s]-y*i,o[s+1]=e+y*(m*i+y*o[s]),h=0;t>h;h++)e=n[h][s+1],n[h][s+1]=y*n[h][s]+m*e,n[h][s]=m*n[h][s]-y*e;c=-y*M*v*w*r[u]/d,r[u]=y*c,o[u]=m*c}while(Math.abs(r[u])>S*k)}o[u]=o[u]+b,r[u]=0}for(s=0;t-1>s;s++){for(h=s,c=o[s],a=s+1;t>a;a++)o[a]a;a++)c=n[a][s],n[a][s]=n[a][h],n[a][h]=c}}function e(t,r,o,n){var i,e,s,a,h,u,f,c=0,l=t-1;for(u=c+1;l-1>=u;u++){for(f=0,a=u;l>=a;a++)f+=Math.abs(r[a][u-1]);if(0!==f){for(s=0,a=l;a>=u;a--)o[a]=r[a][u-1]/f,s+=o[a]*o[a];for(e=Math.sqrt(s),o[u]>0&&(e=-e),s-=o[u]*e,o[u]=o[u]-e,h=u;t>h;h++){for(i=0,a=l;a>=u;a--)i+=o[a]*r[a][h];for(i/=s,a=u;l>=a;a++)r[a][h]-=i*o[a]}for(a=0;l>=a;a++){for(i=0,h=l;h>=u;h--)i+=o[h]*r[a][h];for(i/=s,h=u;l>=h;h++)r[a][h]-=i*o[h]}o[u]=f*o[u],r[u][u-1]=f*e}}for(a=0;t>a;a++)for(h=0;t>h;h++)n[a][h]=a===h?1:0;for(u=l-1;u>=c+1;u--)if(0!==r[u][u-1]){for(a=u+1;l>=a;a++)o[a]=r[a][u-1];for(h=u;l>=h;h++){for(e=0,a=u;l>=a;a++)e+=o[a]*n[a][h];for(e=e/o[u]/r[u][u-1],a=u;l>=a;a++)n[a][h]+=e*o[a]}}}function s(t,r,o,n,i){var e,s,h,u,f,c,l,d,m,p,v,g,w,y,M,x=t-1,b=0,k=t-1,S=Math.pow(2,-52),j=0,q=0,A=0,R=0,D=0,z=0,C=0,O=0;for(e=0;t>e;e++)for((b>e||e>k)&&(o[e]=i[e][e],r[e]=0),s=Math.max(e-1,0);t>s;s++)q+=Math.abs(i[e][s]);for(;x>=b;){for(u=x;u>b&&(z=Math.abs(i[u-1][u-1])+Math.abs(i[u][u]),0===z&&(z=q),!(Math.abs(i[u][u-1])=0){for(C=A>=0?A+C:A-C,o[x-1]=d+C,o[x]=o[x-1],0!==C&&(o[x]=d-l/C),r[x-1]=0,r[x]=0,d=i[x][x-1],z=Math.abs(d)+Math.abs(C),A=d/z,R=C/z,D=Math.sqrt(A*A+R*R),A/=D,R/=D,s=x-1;t>s;s++)C=i[x-1][s],i[x-1][s]=R*C+A*i[x][s],i[x][s]=R*i[x][s]-A*C;for(e=0;x>=e;e++)C=i[e][x-1],i[e][x-1]=R*C+A*i[e][x],i[e][x]=R*i[e][x]-A*C;for(e=b;k>=e;e++)C=n[e][x-1],n[e][x-1]=R*C+A*n[e][x],n[e][x]=R*n[e][x]-A*C}else o[x-1]=d+A,o[x]=d+A,r[x-1]=C,r[x]=-C;x-=2,O=0}else{if(d=i[x][x],m=0,l=0,x>u&&(m=i[x-1][x-1],l=i[x][x-1]*i[x-1][x]),10===O){for(j+=d,e=b;x>=e;e++)i[e][e]-=d;z=Math.abs(i[x][x-1])+Math.abs(i[x-1][x-2]),d=m=.75*z,l=-.4375*z*z}if(30===O&&(z=(m-d)/2,z=z*z+l,z>0)){for(z=Math.sqrt(z),d>m&&(z=-z),z=d-l/((m-d)/2+z),e=b;x>=e;e++)i[e][e]-=z;j+=z,d=m=l=.964}for(O+=1,f=x-2;f>=u&&(C=i[f][f],D=d-C,z=m-C,A=(D*z-l)/i[f+1][f]+i[f][f+1],R=i[f+1][f+1]-C-D-z,D=i[f+2][f+1],z=Math.abs(A)+Math.abs(R)+Math.abs(D),A/=z,R/=z,D/=z,f!==u)&&!(Math.abs(i[f][f-1])*(Math.abs(R)+Math.abs(D))=e;e++)i[e][e-2]=0,e>f+2&&(i[e][e-3]=0);for(h=f;x-1>=h&&(y=h!==x-1,h!==f&&(A=i[h][h-1],R=i[h+1][h-1],D=y?i[h+2][h-1]:0,d=Math.abs(A)+Math.abs(R)+Math.abs(D),0!==d&&(A/=d,R/=d,D/=d)),0!==d);h++)if(z=Math.sqrt(A*A+R*R+D*D),0>A&&(z=-z),0!==z){for(h!==f?i[h][h-1]=-z*d:u!==f&&(i[h][h-1]=-i[h][h-1]),A+=z,d=A/z,m=R/z,C=D/z,R/=A,D/=A,s=h;t>s;s++)A=i[h][s]+R*i[h+1][s],y&&(A+=D*i[h+2][s],i[h+2][s]=i[h+2][s]-A*C),i[h][s]=i[h][s]-A*d,i[h+1][s]=i[h+1][s]-A*m;for(e=0;e<=Math.min(x,h+3);e++)A=d*i[e][h]+m*i[e][h+1],y&&(A+=C*i[e][h+2],i[e][h+2]=i[e][h+2]-A*D),i[e][h]=i[e][h]-A,i[e][h+1]=i[e][h+1]-A*R;for(e=b;k>=e;e++)A=d*n[e][h]+m*n[e][h+1],y&&(A+=C*n[e][h+2],n[e][h+2]=n[e][h+2]-A*D),n[e][h]=n[e][h]-A,n[e][h+1]=n[e][h+1]-A*R}}}if(0!==q){for(x=t-1;x>=0;x--)if(A=o[x],R=r[x],0===R)for(u=x,i[x][x]=1,e=x-1;e>=0;e--){for(l=i[e][e]-A,D=0,s=u;x>=s;s++)D+=i[e][s]*i[s][x];if(r[e]<0)C=l,z=D;else if(u=e,0===r[e]?i[e][x]=0!==l?-D/l:-D/(S*q):(d=i[e][e+1],m=i[e+1][e],R=(o[e]-A)*(o[e]-A)+r[e]*r[e],c=(d*z-C*D)/R,i[e][x]=c,i[e+1][x]=Math.abs(d)>Math.abs(C)?(-D-l*c)/d:(-z-m*c)/C),c=Math.abs(i[e][x]),S*c*c>1)for(s=e;x>=s;s++)i[s][x]=i[s][x]/c}else if(0>R)for(u=x-1,Math.abs(i[x][x-1])>Math.abs(i[x-1][x])?(i[x-1][x-1]=R/i[x][x-1],i[x-1][x]=-(i[x][x]-A)/i[x][x-1]):(M=a(0,-i[x-1][x],i[x-1][x-1]-A,R),i[x-1][x-1]=M[0],i[x-1][x]=M[1]),i[x][x-1]=0,i[x][x]=1,e=x-2;e>=0;e--){for(p=0,v=0,s=u;x>=s;s++)p+=i[e][s]*i[s][x-1],v+=i[e][s]*i[s][x];if(l=i[e][e]-A,r[e]<0)C=l,D=p,z=v;else if(u=e,0===r[e]?(M=a(-p,-v,l,R),i[e][x-1]=M[0],i[e][x]=M[1]):(d=i[e][e+1],m=i[e+1][e],g=(o[e]-A)*(o[e]-A)+r[e]*r[e]-R*R,w=2*(o[e]-A)*R,0===g&&0===w&&(g=S*q*(Math.abs(l)+Math.abs(R)+Math.abs(d)+Math.abs(m)+Math.abs(C))),M=a(d*D-C*p+R*v,d*z-C*v-R*p,g,w),i[e][x-1]=M[0],i[e][x]=M[1],Math.abs(d)>Math.abs(C)+Math.abs(R)?(i[e+1][x-1]=(-p-l*i[e][x-1]+R*i[e][x])/d,i[e+1][x]=(-v-l*i[e][x]-R*i[e][x-1])/d):(M=a(-D-m*i[e][x-1],-z-m*i[e][x],C,R),i[e+1][x-1]=M[0],i[e+1][x]=M[1])),c=Math.max(Math.abs(i[e][x-1]),Math.abs(i[e][x])),S*c*c>1)for(s=e;x>=s;s++)i[s][x-1]=i[s][x-1]/c,i[s][x]=i[s][x]/c}for(e=0;t>e;e++)if(b>e||e>k)for(s=e;t>s;s++)n[e][s]=i[e][s];for(s=t-1;s>=b;s--)for(e=b;k>=e;e++){for(C=0,h=b;h<=Math.min(s,k);h++)C+=n[e][h]*i[h][s];n[e][s]=C}}}function a(t,r,o,n){var i,e;return Math.abs(o)>Math.abs(n)?(i=n/o,e=o+i*n,[(t+i*r)/e,(r-i*t)/e]):(i=o/n,e=n+i*o,[(i*t+r)/e,(i*r-t)/e])}function h(t,r,o,n){this.n=t,this.e=r,this.d=o,this.V=n}function u(t){t=M.checkMatrix(t);var r,o,n,i,e,s,a,h,u,c,l=t.clone(),d=l.rows,m=l.columns,p=new Array(d),v=1;for(r=0;d>r;r++)p[r]=r;for(u=new Array(d),o=0;m>o;o++){for(r=0;d>r;r++)u[r]=l[r][o];for(r=0;d>r;r++){for(h=l[r],c=Math.min(r,o),e=0,n=0;c>n;n++)e+=h[n]*u[n];h[o]=u[r]-=e}for(i=o,r=o+1;d>r;r++)Math.abs(u[r])>Math.abs(u[i])&&(i=r);if(i!==o){for(n=0;m>n;n++)s=l[i][n],l[i][n]=l[o][n],l[o][n]=s;a=p[i],p[i]=p[o],p[o]=a,v=-v}if(d>o&&0!==l[o][o])for(r=o+1;d>r;r++)l[r][o]/=l[o][o]}return new f(l,p,v)}function f(t,r,o){this.LU=t,this.pivotVector=r,this.pivotSign=o}function c(t){t=M.checkMatrix(t);var r,o,n,i,e=t.clone(),s=t.rows,a=t.columns,h=new Array(a);for(n=0;a>n;n++){var u=0;for(r=n;s>r;r++)u=g(u,e[r][n]);if(0!==u){for(e[n][n]<0&&(u=-u),r=n;s>r;r++)e[r][n]/=u;for(e[n][n]+=1,o=n+1;a>o;o++){for(i=0,r=n;s>r;r++)i+=e[r][n]*e[r][o];for(i=-i/e[n][n],r=n;s>r;r++)e[r][o]+=i*e[r][n]}}h[n]=-u}return new l(e,h)}function l(t,r){this.QR=t,this.Rdiag=r}function d(t,r){t=M.checkMatrix(t),r=r||{};var o=t.clone(),n=t.rows,i=t.columns,e=Math.min(n,i),s=!0,a=!0;r.computeLeftSingularVectors===!1&&(s=!1),r.computeRightSingularVectors===!1&&(a=!1);var h=r.autoTranspose===!0,u=!1;if(i>n)if(h){o=o.transpose(),n=o.rows,i=o.columns,u=!0;var f=s;s=a,a=f}else console.warn("WARNING: Computing SVD on a matrix with more columns than rows.");var c,l,d,p,v,w,y,x,b,k,S,j,q,A,R,D,z,C,O,I,V,E=new Array(Math.min(n+1,i)),U=M.zeros(n,e),L=M.zeros(i,i),_=new Array(i),N=new Array(n),T=Math.min(n-1,i),P=Math.max(0,Math.min(i-2,n));for(d=0,k=Math.max(T,P);k>d;d++){if(T>d){for(E[d]=0,c=d;n>c;c++)E[d]=g(E[d],o[c][d]);if(0!==E[d]){for(o[d][d]<0&&(E[d]=-E[d]),c=d;n>c;c++)o[c][d]/=E[d];o[d][d]+=1}E[d]=-E[d]}for(l=d+1;i>l;l++){if(T>d&&0!==E[d]){for(v=0,c=d;n>c;c++)v+=o[c][d]*o[c][l];for(v=-v/o[d][d],c=d;n>c;c++)o[c][l]+=v*o[c][d]}_[l]=o[d][l]}if(s&&T>d)for(c=d;n>c;c++)U[c][d]=o[c][d];if(P>d){for(_[d]=0,c=d+1;i>c;c++)_[d]=g(_[d],_[c]);if(0!==_[d]){for(_[d+1]<0&&(_[d]=-_[d]),c=d+1;i>c;c++)_[c]/=_[d];_[d+1]+=1}if(_[d]=-_[d],n>d+1&&0!==_[d]){for(c=d+1;n>c;c++)N[c]=0;for(l=d+1;i>l;l++)for(c=d+1;n>c;c++)N[c]+=_[l]*o[c][l];for(l=d+1;i>l;l++)for(v=-_[l]/_[d+1],c=d+1;n>c;c++)o[c][l]+=v*N[c]}if(a)for(c=d+1;i>c;c++)L[c][d]=_[c]}}if(p=Math.min(i,n+1),i>T&&(E[T]=o[T][T]),p>n&&(E[p-1]=0),p>P+1&&(_[P]=o[P][p-1]),_[p-1]=0,s){for(l=T;e>l;l++){for(c=0;n>c;c++)U[c][l]=0;U[l][l]=1}for(d=T-1;d>=0;d--)if(0!==E[d]){for(l=d+1;e>l;l++){for(v=0,c=d;n>c;c++)v+=U[c][d]*U[c][l];for(v=-v/U[d][d],c=d;n>c;c++)U[c][l]+=v*U[c][d]}for(c=d;n>c;c++)U[c][d]=-U[c][d];for(U[d][d]=1+U[d][d],c=0;d-1>c;c++)U[c][d]=0}else{for(c=0;n>c;c++)U[c][d]=0;U[d][d]=1}}if(a)for(d=i-1;d>=0;d--){if(P>d&&0!==_[d])for(l=d+1;i>l;l++){for(v=0,c=d+1;i>c;c++)v+=L[c][d]*L[c][l];for(v=-v/L[d+1][d],c=d+1;i>c;c++)L[c][l]+=v*L[c][d]}for(c=0;i>c;c++)L[c][d]=0;L[d][d]=1}for(var H=p-1,Q=0,W=Math.pow(2,-52);p>0;){for(d=p-2;d>=-1&&-1!==d;d--)if(Math.abs(_[d])<=W*(Math.abs(E[d])+Math.abs(E[d+1]))){_[d]=0;break}if(d===p-2)S=4;else{for(w=p-1;w>=d&&w!==d;w--)if(v=(w!==p?Math.abs(_[w]):0)+(w!==d+1?Math.abs(_[w-1]):0),Math.abs(E[w])<=W*v){E[w]=0;break}w===d?S=3:w===p-1?S=1:(S=2,d=w)}switch(d++,S){case 1:for(y=_[p-2],_[p-2]=0,l=p-2;l>=d;l--)if(v=g(E[l],y),x=E[l]/v,b=y/v,E[l]=v,l!==d&&(y=-b*_[l-1],_[l-1]=x*_[l-1]),a)for(c=0;i>c;c++)v=x*L[c][l]+b*L[c][p-1],L[c][p-1]=-b*L[c][l]+x*L[c][p-1],L[c][l]=v;break;case 2:for(y=_[d-1],_[d-1]=0,l=d;p>l;l++)if(v=g(E[l],y),x=E[l]/v,b=y/v,E[l]=v,y=-b*_[l],_[l]=x*_[l],s)for(c=0;n>c;c++)v=x*U[c][l]+b*U[c][d-1],U[c][d-1]=-b*U[c][l]+x*U[c][d-1],U[c][l]=v;break;case 3:for(j=Math.max(Math.max(Math.max(Math.max(Math.abs(E[p-1]),Math.abs(E[p-2])),Math.abs(_[p-2])),Math.abs(E[d])),Math.abs(_[d])),q=E[p-1]/j,A=E[p-2]/j,R=_[p-2]/j,D=E[d]/j,z=_[d]/j,C=((A+q)*(A-q)+R*R)/2,O=q*R*q*R,I=0,(0!==C||0!==O)&&(I=Math.sqrt(C*C+O),0>C&&(I=-I),I=O/(C+I)),y=(D+q)*(D-q)+I,V=D*z,l=d;p-1>l;l++){if(v=g(y,V),x=y/v,b=V/v,l!==d&&(_[l-1]=v),y=x*E[l]+b*_[l],_[l]=x*_[l]-b*E[l],V=b*E[l+1],E[l+1]=x*E[l+1],a)for(c=0;i>c;c++)v=x*L[c][l]+b*L[c][l+1],L[c][l+1]=-b*L[c][l]+x*L[c][l+1],L[c][l]=v;if(v=g(y,V),x=y/v,b=V/v,E[l]=v,y=x*_[l]+b*E[l+1],E[l+1]=-b*_[l]+x*E[l+1],V=b*_[l+1],_[l+1]=x*_[l+1],s&&n-1>l)for(c=0;n>c;c++)v=x*U[c][l]+b*U[c][l+1],U[c][l+1]=-b*U[c][l]+x*U[c][l+1],U[c][l]=v}_[p-2]=y,Q+=1;break;case 4:if(E[d]<=0&&(E[d]=E[d]<0?-E[d]:0,a))for(c=0;H>=c;c++)L[c][d]=-L[c][d];for(;H>d&&!(E[d]>=E[d+1]);){if(v=E[d],E[d]=E[d+1],E[d+1]=v,a&&i-1>d)for(c=0;i>c;c++)v=L[c][d+1],L[c][d+1]=L[c][d],L[c][d]=v;if(s&&n-1>d)for(c=0;n>c;c++)v=U[c][d+1],U[c][d+1]=U[c][d],U[c][d]=v;d++}Q=0,p--}}if(u){var B=L;L=U,U=B}return new m(n,i,E,U,L)}function m(t,r,o,n,i){this.m=t,this.n=r,this.s=o,this.U=n,this.V=i}function p(t){if(t=M.checkMatrix(t),!t.isSymmetric())throw new Error("Matrix is not symmetric");var r,o,n,i=t,e=i.rows,s=new M(e,e),a=!0;for(o=0;e>o;o++){var h=s[o],u=0;for(n=0;o>n;n++){var f=s[n],c=0;for(r=0;n>r;r++)c+=f[r]*h[r];h[n]=c=(i[o][n]-c)/s[n][n],u+=c*c}for(u=i[o][o]-u,a&=u>0,s[o][o]=Math.sqrt(Math.max(u,0)),n=o+1;e>n;n++)s[o][n]=0}if(!a)throw new Error("Matrix is not positive definite");return new v(s)}function v(t){this.L=t}function g(t,r){var o;return Math.abs(t)>Math.abs(r)?(o=r/t,Math.abs(t)*Math.sqrt(1+o*o)):0!==r?(o=t/r,Math.abs(r)*Math.sqrt(1+o*o)):0}function w(t){return y(t,M.eye(t.rows))}function y(t,r){return t.isSquare()?new u(t).solve(r):new c(t).solve(r)}var M=t("./matrix");h.prototype={get realEigenvalues(){return this.d},get imaginaryEigenvalues(){return this.e},get eigenvectorMatrix(){return this.V},get diagonalMatrix(){var t,r,o=this.n,n=this.e,i=this.d,e=new M(o,o);for(t=0;o>t;t++){for(r=0;o>r;r++)e[t][r]=0;e[t][t]=i[t],n[t]>0?e[t][t+1]=n[t]:n[t]<0&&(e[t][t-1]=n[t])}return e}},f.prototype={isSingular:function(){for(var t=this.LU,r=t.columns,o=0;r>o;o++)if(0===t[o][o])return!0;return!1},get determinant(){var t=this.LU;if(!t.isSquare())throw new Error("Matrix must be square");for(var r=this.pivotSign,o=t.columns,n=0;o>n;n++)r*=t[n][n];return r},get lowerTriangularFactor(){for(var t=this.LU,r=t.rows,o=t.columns,n=new M(r,o),i=0;r>i;i++)for(var e=0;o>e;e++)n[i][e]=i>e?t[i][e]:i===e?1:0;return n},get upperTriangularFactor(){for(var t=this.LU,r=t.rows,o=t.columns,n=new M(r,o),i=0;r>i;i++)for(var e=0;o>e;e++)n[i][e]=e>=i?t[i][e]:0;return n},get pivotPermutationVector(){return this.pivotVector.slice()},solve:function(t){t=M.checkMatrix(t);var r=this.LU,o=r.rows;if(o!==t.rows)throw new Error("Invalid matrix dimensions");if(this.isSingular())throw new Error("LU matrix is singular");var n,i,e,s=t.columns,a=t.subMatrixRow(this.pivotVector,0,s-1),h=r.columns;for(e=0;h>e;e++)for(n=e+1;h>n;n++)for(i=0;s>i;i++)a[n][i]-=a[e][i]*r[n][e];for(e=h-1;e>=0;e--){for(i=0;s>i;i++)a[e][i]/=r[e][e];for(n=0;e>n;n++)for(i=0;s>i;i++)a[n][i]-=a[e][i]*r[n][e]}return a}},l.prototype={solve:function(t){t=M.checkMatrix(t);var r=this.QR,o=r.rows;if(t.rows!==o)throw new Error("Matrix row dimensions must agree");if(!this.isFullRank())throw new Error("Matrix is rank deficient");var n,i,e,s,a=t.columns,h=t.clone(),u=r.columns;for(e=0;u>e;e++)for(i=0;a>i;i++){for(s=0,n=e;o>n;n++)s+=r[n][e]*h[n][i];for(s=-s/r[e][e],n=e;o>n;n++)h[n][i]+=s*r[n][e]}for(e=u-1;e>=0;e--){for(i=0;a>i;i++)h[e][i]/=this.Rdiag[e];for(n=0;e>n;n++)for(i=0;a>i;i++)h[n][i]-=h[e][i]*r[n][e]}return h.subMatrix(0,u-1,0,a-1)},isFullRank:function(){for(var t=this.QR.columns,r=0;t>r;r++)if(0===this.Rdiag[r])return!1;return!0},get upperTriangularFactor(){var t,r,o=this.QR,n=o.columns,i=new M(n,n);for(t=0;n>t;t++)for(r=0;n>r;r++)i[t][r]=r>t?o[t][r]:t===r?this.Rdiag[t]:0;return i},get orthogonalFactor(){var t,r,o,n,i=this.QR,e=i.rows,s=i.columns,a=new M(e,s);for(o=s-1;o>=0;o--){for(t=0;e>t;t++)a[t][o]=0;for(a[o][o]=1,r=o;s>r;r++)if(0!==i[o][o]){for(n=0,t=o;e>t;t++)n+=i[t][o]*a[t][r];for(n=-n/i[o][o],t=o;e>t;t++)a[t][r]+=n*i[t][o]}}return a}},m.prototype={get condition(){return this.s[0]/this.s[Math.min(this.m,this.n)-1]},get norm2(){return this.s[0]},get rank(){for(var t=Math.pow(2,-52),r=Math.max(this.m,this.n)*this.s[0]*t,o=0,n=this.s,i=0,e=n.length;e>i;i++)n[i]>r&&o++;return o},get diagonal(){return this.s},get threshold(){return Math.pow(2,-52)/2*Math.max(this.m,this.n)*this.s[0]},get leftSingularVectors(){return this.U},get rightSingularVectors(){return this.V},get diagonalMatrix(){return M.diag(this.s)},solve:function(t){var r,o=t,n=this.threshold,i=this.s.length,e=M.zeros(i,i);for(r=0;i>r;r++)e[r][r]=Math.abs(this.s[r])<=n?0:1/this.s[r];var s,a,h,u=this.V.mmul(e),f=this.V.rows,c=this.U.rows,l=M.zeros(f,c);for(r=0;f>r;r++)for(s=0;c>s;s++){for(h=0,a=0;i>a;a++)h+=u[r][a]*this.U[s][a];l[r][s]=h}return l.mmul(o)},solveForDiagonal:function(t){return this.solve(M.diag(t))},inverse:function(){var t,r,o=this.threshold,n=this.V.rows,i=this.V.columns,e=new M(n,this.s.length);for(t=0;n>t;t++)for(r=0;i>r;r++)Math.abs(this.s[r])>o&&(e[t][r]=this.V[t][r]/this.s[r]);var s,a,h=this.U.rows,u=this.U.columns,f=new M(n,h);for(t=0;n>t;t++)for(r=0;h>r;r++){for(a=0,s=0;u>s;s++)a+=e[t][s]*this.U[r][s];f[t][r]=a}return f}},v.prototype={get leftTriangularFactor(){return this.L},solve:function(t){t=M.checkMatrix(t);var r=this.L,o=r.rows;if(t.rows!==o)throw new Error("Matrix dimensions do not match");var n,i,e,s=t.columns,a=t.clone();for(e=0;o>e;e++)for(i=0;s>i;i++){for(n=0;e>n;n++)a[e][i]-=a[n][i]*r[e][n];a[e][i]/=r[e][e]}for(e=o-1;e>=0;e--)for(i=0;s>i;i++){for(n=e+1;o>n;n++)a[e][i]-=a[n][i]*r[n][e];a[e][i]/=r[e][e]}return a}},r.exports={LuDecomposition:u,LU:u,QrDecomposition:c,QR:c,SingularValueDecomposition:d,SVD:d,EigenvalueDecomposition:o,EVD:o,CholeskyDecomposition:p,CHO:p,inverse:w,solve:y}},{"./matrix":55}],54:[function(t,r){"use strict";r.exports=t("./matrix"),r.exports.Decompositions=r.exports.DC=t("./decompositions")},{"./decompositions":53,"./matrix":55}],55:[function(t,r){"use strict";function o(t){for(var r=0,o=t.length,n=new Array(o);o>r;r++)n[r]=t[r];return n}function n(t){this.message=t||"Unknown matrix error"}function i(t){throw new n(t)}function e(t,r){var n,s,a=0;if(t instanceof Array)if(s=r,n=s?o(t):t,t=n.length,r=n[0].length,"undefined"==typeof r&&i("Data must be a 2D array"),t>0&&r>0)for(;t>a;a++)n[a].length!==r?i("Inconsistent array dimensions"):s&&(n[a]=o(n[a]));else i("Invalid dimensions: "+t+"x"+r);else if("number"==typeof t)if(t>0&&r>0)for(n=new Array(t);t>a;a++)n[a]=new Array(r);else i("Invalid dimensions: "+t+"x"+r);else i("Invalid arguments");return Object.defineProperty(n,"rows",{writable:!0,value:t}),Object.defineProperty(n,"columns",{writable:!0,value:r}),n.__proto__=e.prototype,n}var s=Array.prototype.splice,a=Array.prototype.concat;n.prototype=Object.create(Error.prototype),n.prototype.name="MatrixError",n.prototype.constructor=n,e.from1DArray=function(t,r,o){var n,s,a=0;for(n=t*r,n!==o.length&&i("Data length does not match given dimensions"),s=new Array(t);t>a;a++)s[a]=o.slice(a*r,(a+1)*r);return new e(s)},e.rowVector=function(t){return new e([t])},e.columnVector=function(t){for(var r=t.length,o=new Array(r),n=0;r>n;n++)o[n]=[t[n]];return new e(o)},e.empty=function(t,r){return new e(t,r)},e.zeros=function(t,r){return e.empty(t,r).fill(0)},e.ones=function(t,r){return e.empty(t,r).fill(1)},e.rand=function(t,r){for(var o=e.empty(t,r),n=0,i=o.rows;i>n;n++)for(var s=0,a=o.columns;a>s;s++)o[n][s]=Math.random();return o},e.eye=function(t){for(var r=e.zeros(t,t),o=r.rows,n=0;o>n;n++)r[n][n]=1;return r},e.diag=function(t){for(var r=t.length,o=e.zeros(r,r),n=0;r>n;n++)o[n][n]=t[n];return o},e.indices=function(t,r){for(var o=new Array(r-t),n=0;ns&&(s=arguments[r].columns);var a=e.zeros(i,s),h=0;for(r=0;rt||t>this.rows-1)&&i("Row index out of range.")},e.prototype.checkColumnIndex=function(t){(0>t||t>this.columns-1)&&i("Column index out of range.")},e.prototype.checkDimensions=function(t){(this.rows!==t.rows||this.columns!==t.columns)&&i("Matrices dimensions must be equal.")},e.prototype.apply=function(t){for(var r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)t.call(this,n,i);return this},e.prototype.clone=function(){return new e(this.to2DArray())},e.prototype.to1DArray=function(){return a.apply([],this)},e.prototype.to2DArray=function(){for(var t=this.rows,r=new Array(t),n=0;t>n;n++)r[n]=o(this[n]);return r},e.prototype.isRowVector=function(){return 1===this.rows},e.prototype.isColumnVector=function(){return 1===this.columns},e.prototype.isVector=function(){return 1===this.rows||1===this.columns},e.prototype.isSquare=function(){return this.rows===this.columns},e.prototype.isSymmetric=function(){if(this.isSquare()){for(var t=this.rows,r=0;t>r;r++)for(var o=0;r>=o;o++)if(this[r][o]!==this[o][r])return!1;return!0}return!1},e.prototype.set=function(t,r,o){return this[t][r]=o,this},e.prototype.get=function(t,r){return this[t][r]},e.prototype.fill=function(t){for(var r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)this[n][i]=t;return this},e.prototype.neg=function(){return this.mulS(-1)},e.prototype.add=function(t){return"number"==typeof t?this.addS(t):(t=e.checkMatrix(t),this.addM(t))},e.prototype.addS=function(t){for(var r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)this[n][i]+=t;return this},e.prototype.addM=function(t){this.checkDimensions(t);for(var r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)this[n][i]+=t[n][i];return this},e.prototype.sub=function(t){return"number"==typeof t?this.subS(t):(t=e.checkMatrix(t),this.subM(t))},e.prototype.subS=function(t){for(var r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)this[n][i]-=t;return this},e.prototype.subM=function(t){this.checkDimensions(t);for(var r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)this[n][i]-=t[n][i];return this},e.prototype.mul=function(t){return"number"==typeof t?this.mulS(t):(t=e.checkMatrix(t),this.mulM(t)) -},e.prototype.mulS=function(t){for(var r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)this[n][i]*=t;return this},e.prototype.mulM=function(t){this.checkDimensions(t);for(var r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)this[n][i]*=t[n][i];return this},e.prototype.div=function(t){return"number"==typeof t?this.divS(t):(t=e.checkMatrix(t),this.divM(t))},e.prototype.divS=function(t){for(var r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)this[n][i]/=t;return this},e.prototype.divM=function(t){this.checkDimensions(t);for(var r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)this[n][i]/=t[n][i];return this},e.prototype.getRow=function(t){return this.checkRowIndex(t),o(this[t])},e.prototype.setRow=function(t,r){return this.checkRowIndex(t),e.isMatrix(r)&&(r=r.to1DArray()),r.length!==this.columns&&i("Invalid row size"),this[t]=o(r),this},e.prototype.removeRow=function(t){return this.checkRowIndex(t),1===this.rows&&i("A matrix cannot have less than one row"),s.call(this,t,1),this.rows-=1,this},e.prototype.addRow=function(t,r){return"undefined"==typeof r&&(r=t,t=this.rows),(0>t||t>this.rows)&&i("Row index out of range."),e.isMatrix(r)&&(r=r.to1DArray()),r.length!==this.columns&&i("Invalid row size"),s.call(this,t,0,o(r)),this.rows+=1,this},e.prototype.swapRows=function(t,r){this.checkRowIndex(t),this.checkRowIndex(r);var o=this[t];return this[t]=this[r],this[r]=o,this},e.prototype.getColumn=function(t){this.checkColumnIndex(t);for(var r=this.rows,o=new Array(r),n=0;r>n;n++)o[n]=this[n][t];return o},e.prototype.setColumn=function(t,r){this.checkColumnIndex(t),e.isMatrix(r)&&(r=r.to1DArray());var o=this.rows;r.length!==o&&i("Invalid column size");for(var n=0;o>n;n++)this[n][t]=r[n];return this},e.prototype.removeColumn=function(t){this.checkColumnIndex(t),1===this.columns&&i("A matrix cannot have less than one column");for(var r=0,o=this.rows;o>r;r++)this[r].splice(t,1);return this.columns-=1,this},e.prototype.addColumn=function(t,r){"undefined"==typeof r&&(r=t,t=this.columns),(0>t||t>this.columns)&&i("Column index out of range."),e.isMatrix(r)&&(r=r.to1DArray());var o=this.rows;r.length!==o&&i("Invalid column size");for(var n=0;o>n;n++)this[n].splice(t,0,r[n]);return this.columns+=1,this},e.prototype.swapColumns=function(t,r){this.checkRowIndex(t),this.checkRowIndex(r);for(var o,n,i=this.rows,e=0;i>e;e++)n=this[e],o=n[t],n[t]=n[r],n[r]=o;return this},e.prototype.checkRowVector=function(t){return e.isMatrix(t)&&(t=t.to1DArray()),t.length!==this.columns&&i("vector size must be the same as the number of columns"),t},e.prototype.checkColumnVector=function(t){return e.isMatrix(t)&&(t=t.to1DArray()),t.length!==this.rows&&i("vector size must be the same as the number of rows"),t},e.prototype.addRowVector=function(t){t=this.checkRowVector(t);for(var r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)this[n][i]+=t[i];return this},e.prototype.subRowVector=function(t){t=this.checkRowVector(t);for(var r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)this[n][i]-=t[i];return this},e.prototype.mulRowVector=function(t){t=this.checkRowVector(t);for(var r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)this[n][i]*=t[i];return this},e.prototype.divRowVector=function(t){t=this.checkRowVector(t);for(var r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)this[n][i]/=t[i];return this},e.prototype.addColumnVector=function(t){t=this.checkColumnVector(t);for(var r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)this[n][i]+=t[n];return this},e.prototype.subColumnVector=function(t){t=this.checkColumnVector(t);for(var r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)this[n][i]-=t[n];return this},e.prototype.mulColumnVector=function(t){t=this.checkColumnVector(t);for(var r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)this[n][i]*=t[n];return this},e.prototype.divColumnVector=function(t){t=this.checkColumnVector(t);for(var r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)this[n][i]/=t[n];return this},e.prototype.mulRow=function(t,r){this.checkRowIndex(t);for(var o=0,n=this.columns;n>o;o++)this[t][o]*=r;return this},e.prototype.mulColumn=function(t,r){this.checkColumnIndex(t);for(var o=0,n=this.rows;n>o;o++)this[o][t]*=r},e.prototype.max=function(){for(var t=-1/0,r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)this[n][i]>t&&(t=this[n][i]);return t},e.prototype.maxIndex=function(){for(var t=-1/0,r={},o=this.rows,n=this.columns,i=0;o>i;i++)for(var e=0;n>e;e++)this[i][e]>t&&(t=this[i][e],r.row=i,r.column=e);return r},e.prototype.min=function(){for(var t=1/0,r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)this[n][i]i;i++)for(var e=0;n>e;e++)this[i][e]o;o++)this[t][o]>r&&(r=this[t][o]);return r},e.prototype.maxRowIndex=function(t){this.checkRowIndex(t);for(var r=-1/0,o={row:t},n=0,i=this.columns;i>n;n++)this[t][n]>r&&(r=this[t][n],o.column=n);return o},e.prototype.minRow=function(t){this.checkRowIndex(t);for(var r=1/0,o=0,n=this.columns;n>o;o++)this[t][o]n;n++)this[t][n]o;o++)this[o][t]>r&&(r=this[o][t]);return r},e.prototype.maxColumnIndex=function(t){this.checkColumnIndex(t);for(var r=-1/0,o={row:0,column:t},n=0,i=this.rows;i>n;n++)this[n][t]>r&&(r=this[n][t],o.row=n);return o},e.prototype.minColumn=function(t){this.checkColumnIndex(t);for(var r=1/0,o=0,n=this.rows;n>o;o++)this[o][t]n;n++)this[n][t]t;t++)h[t]=this[t][t];return h},e.prototype.sum=function(){for(var t=0,r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)t+=this[n][i];return t},e.prototype.mean=function(){return this.sum()/this.size},e.prototype.prod=function u(){for(var u=1,t=this.rows,r=this.columns,o=0;t>o;o++)for(var n=0;r>n;n++)u*=this[o][n];return u},e.prototype.cumulativeSum=function(){for(var t=0,r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)t+=this[n][i],this[n][i]=t;return this},e.prototype.dot=function f(t){this.size!==t.size&&i("vectors do not have the same size");for(var r=this.to1DArray(),o=t.to1DArray(),f=0,n=r.length,e=0;n>e;e++)f+=r[e]*o[e];return f},e.prototype.mmul=function(t){this.columns!==t.rows&&console.warn("Number of columns of left matrix are not equal to number of rows of right matrix.");var r,o,n,i=this.rows,s=this.columns,a=t.columns,h=new e(i,a),u=new Array(s);for(o=0;a>o;o++){for(n=0;s>n;n++)u[n]=t[n][o];for(r=0;i>r;r++){var f=this[r],c=0;for(n=0;s>n;n++)c+=f[n]*u[n];h[r][o]=c}}return h},e.prototype.sortRows=function(t){for(var r=0,o=this.rows;o>r;r++)this[r].sort(t);return this},e.prototype.sortColumns=function(t){for(var r=0,o=this.columns;o>r;r++)this.setColumn(r,this.getColumn(r).sort(t));return this},e.prototype.transpose=function(){for(var t=new e(this.columns,this.rows),r=this.rows,o=this.columns,n=0;r>n;n++)for(var i=0;o>i;i++)t[i][n]=this[n][i];return t},e.prototype.subMatrix=function(t,r,o,n){(t>r||o>n||0>t||t>=this.rows||0>r||r>=this.rows||0>o||o>=this.columns||0>n||n>=this.columns)&&i("Argument out of range");for(var s=new e(r-t+1,n-o+1),a=t;r>=a;a++)for(var h=o;n>=h;h++)s[a-t][h-o]=this[a][h];return s},e.prototype.subMatrixRow=function(t,r,o){"undefined"==typeof r?(r=0,o=this.columns-1):"undefined"==typeof o&&(o=this.columns-1),(r>o||0>r||r>=this.columns||0>o||o>=this.columns)&&i("Argument out of range.");for(var n=t.length,s=this.rows,a=new e(n,o-r+1),h=0;n>h;h++)for(var u=r;o>=u;u++)(t[h]<0||t[h]>=s)&&i("Argument out of range."),a[h][u-r]=this[t[h]][u];return a},e.prototype.subMatrixColumn=function(t,r,o){"undefined"==typeof r?(r=0,o=this.rows-1):"undefined"==typeof o&&(o=this.rows-1),(r>o||0>r||r>=this.rows||0>o||o>=this.rows)&&i("Argument out of range.");for(var n=t.length,s=this.columns,a=new e(o-r+1,n),h=0;n>h;h++)for(var u=r;o>=u;u++)(t[h]<0||t[h]>=s)&&i("Argument out of range."),a[u-r][h]=this[u][t[h]];return a},e.prototype.trace=function c(){this.isSquare()||i("The matrix is not square");for(var c=0,t=0,r=this.rows;r>t;t++)c+=this[t][t];return c},e.prototype.abs=function(){for(var t=this.rows,r=this.columns,o=0;t>o;o++)for(var n=0;r>n;n++)this[o][n]=Math.abs(this[o][n])},e.MatrixError=n,r.exports=e},{}],56:[function(require,module,exports){"use strict";function SOM(t,r,o,n){this.x=t,this.y=r,o=o||{},this.options={};for(var i in defaultOptions)this.options[i]=o.hasOwnProperty(i)?o[i]:defaultOptions[i];if("number"==typeof this.options.fields)this.numWeights=this.options.fields;else{if(!Array.isArray(this.options.fields))throw new Error("Invalid fields definition");this.numWeights=this.options.fields.length;var e=getConverters(this.options.fields);this.extractor=e.extractor,this.creator=e.creator}if("rect"===this.options.gridType)this.nodeType=NodeSquare,this.gridDim={x:t,y:r};else{this.nodeType=NodeHexagonal;var s=this.x-Math.floor(this.y/2);this.gridDim={x:s,y:this.y,z:-(0-s-this.y)}}if(this.torus=this.options.torus,this.distanceMethod=this.torus?"getDistanceTorus":"getDistance",this.distance=this.options.distance,this.maxDistance=getMaxDistance(this.distance,this.numWeights),n===!0)return void(this.done=!0);if(!(t>0&&r>0))throw new Error("x and y must be positive");this.times={findBMU:0,adjust:0},this.randomizer=this.options.randomizer,this.iterationCount=0,this.iterations=this.options.iterations,this.startLearningRate=this.learningRate=this.options.learningRate,this.mapRadius=Math.floor(Math.max(t,r)/2),this.algorithmMethod=this.options.method,this._initNodes(),this.done=!1}function getConverters(t){for(var r=t.length,o=new Array(r),n=new Array(r),i=0;r>i;i++)o[i]=getNormalizer(t[i].range),n[i]=getDenormalizer(t[i].range);return{extractor:function(n){for(var i=new Array(r),e=0;r>e;e++)i[e]=o[e](n[t[e].name]);return i},creator:function(o){for(var i={},e=0;r>e;e++)i[t[e].name]=n[e](o[e]);return i}}}function getNormalizer(t){return function(r){return(r-t[0])/(t[1]-t[0])}}function getDenormalizer(t){return function(r){return t[0]+r*(t[1]-t[0])}}function squareEuclidean(t,r){for(var o=0,n=0,i=t.length;i>n;n++)o+=(t[n]-r[n])*(t[n]-r[n]);return o}function getRandomValue(t,r){return t[Math.floor(r()*t.length)]}function getMaxDistance(t,r){for(var o=new Array(r),n=new Array(r),i=0;r>i;i++)o[i]=0,n[i]=1;return t(o,n)}var NodeSquare=require("./node-square"),NodeHexagonal=require("./node-hexagonal"),defaultOptions={fields:3,randomizer:Math.random,distance:squareEuclidean,iterations:10,learningRate:.1,gridType:"rect",torus:!0,method:"random"};SOM.load=function loadModel(model,distance){if("SOM"===model.name){var x=model.data.length,y=model.data[0].length;distance?model.options.distance=distance:model.options.distance&&(model.options.distance=eval("("+model.options.distance+")"));var som=new SOM(x,y,model.options,!0);som.nodes=new Array(x);for(var i=0;x>i;i++){som.nodes[i]=new Array(y);for(var j=0;y>j;j++)som.nodes[i][j]=new som.nodeType(i,j,model.data[i][j],som)}return som}throw new Error("expecting a SOM model")},SOM.prototype.export=function(t){if(!this.done)throw new Error("model is not ready yet");var r={name:"SOM"};r.options={fields:this.options.fields,gridType:this.options.gridType,torus:this.options.torus},r.data=new Array(this.x);for(var o=0;or;r++)n[r]=this.extractor(t[r]);this.numIterations=this.iterations*i,this.timeConstant="random"===this.algorithmMethod?this.numIterations/Math.log(this.mapRadius):i/Math.log(this.mapRadius),this.trainingSet=n,this.times.setTraining=Date.now()-o},SOM.prototype.trainOne=function(){if(this.done)return!1;if(this.numIterations-->0){var t,r,o;return"random"===this.algorithmMethod?(t=this.mapRadius*Math.exp(-this.iterationCount/this.timeConstant),r=getRandomValue(this.trainingSet,this.randomizer),this._adjust(r,t),this.learningRate=this.startLearningRate*Math.exp(-this.iterationCount/this.numIterations)):(o=-Math.floor(this.iterationCount/this.trainingSet.length),t=this.mapRadius*Math.exp(o/this.timeConstant),r=this.trainingSet[this.iterationCount%this.trainingSet.length],this._adjust(r,t),(this.iterationCount+1)%this.trainingSet.length===0&&(this.learningRate=this.startLearningRate*Math.exp(o/Math.floor(this.numIterations/this.trainingSet.length)))),this.iterationCount++,!0}return this.done=!0,!1},SOM.prototype._adjust=function(t,r){var o,n,i,e,s=Date.now(),a=this._findBestMatchingUnit(t),h=Date.now();this.times.findBMU+=h-s;var u=Math.floor(r),f=a.x-u,c=a.x+u,l=a.y-u,d=a.y+u;for(o=f;c>=o;o++){var m=o;for(0>o?m+=this.x:o>=this.x&&(m-=this.x),n=l;d>=n;n++){var p=n;0>n?p+=this.y:n>=this.y&&(p-=this.y),i=a[this.distanceMethod](this.nodes[m][p]),r>i&&(e=Math.exp(-i/(2*r)),this.nodes[m][p].adjustWeights(t,this.learningRate,e))}}this.times.adjust+=Date.now()-h},SOM.prototype.train=function(t){if(!this.done)for(this.setTraining(t);this.trainOne(););},SOM.prototype.getConvertedNodes=function(){for(var t=new Array(this.x),r=0;ro&&(n=o,r=this.nodes[i][e]);return r},SOM.prototype.predict=function(t,r){if("boolean"==typeof t&&(r=t,t=null),t||(t=this.trainingSet),Array.isArray(t)&&(Array.isArray(t[0])||"object"==typeof t[0])){var o=this;return t.map(function(t){return o._predict(t,r)})}return this._predict(t,r)},SOM.prototype._predict=function(t,r){Array.isArray(t)||(t=this.extractor(t));var o=this._findBestMatchingUnit(t),n=[o.x,o.y];return r&&(n[2]=o.getPosition(t)),n},SOM.prototype.getQuantizationError=function(){for(var t=this.getFit(),r=t.length,o=0,n=0;r>n;n++)o+=t[n];return o/r},SOM.prototype.getFit=function(t){t||(t=this.trainingSet);for(var r,o=t.length,n=new Array(o),i=0;o>i;i++)r=this._findBestMatchingUnit(t[i]),n[i]=Math.sqrt(this.distance(t[i],r.weights));return n},module.exports=SOM},{"./node-hexagonal":57,"./node-square":58}],57:[function(t,r){function o(t,r,o,i){n.call(this,t,r,o,i),this.hX=t-Math.floor(r/2),this.z=0-this.hX-r}var n=t("./node-square");o.prototype=new n,o.prototype.constructor=o,o.prototype.getDistance=function(t){return Math.max(Math.abs(this.hX-t.hX),Math.abs(this.y-t.y),Math.abs(this.z-t.z))},o.prototype.getDistanceTorus=function(t){var r=Math.abs(this.hX-t.hX),o=Math.abs(this.y-t.y),n=Math.abs(this.z-t.z);return Math.max(Math.min(r,this.som.gridDim.x-r),Math.min(o,this.som.gridDim.y-o),Math.min(n,this.som.gridDim.z-n))},o.prototype.getPosition=function(){throw new Error("Unimplemented : cannot get position of the points for hexagonal grid")},r.exports=o},{"./node-square":58}],58:[function(t,r){function o(t,r,o,n){this.x=t,this.y=r,this.weights=o,this.som=n,this.neighbors={}}o.prototype.adjustWeights=function(t,r,o){for(var n=0,i=this.weights.length;i>n;n++)this.weights[n]+=r*o*(t[n]-this.weights[n])},o.prototype.getDistance=function(t){return Math.max(Math.abs(this.x-t.x),Math.abs(this.y-t.y))},o.prototype.getDistanceTorus=function(t){var r=Math.abs(this.x-t.x),o=Math.abs(this.y-t.y);return Math.max(Math.min(r,this.som.gridDim.x-r),Math.min(o,this.som.gridDim.y-o))},o.prototype.getNeighbors=function(t){if(!this.neighbors[t]){this.neighbors[t]=new Array(2);var r;if(this[t]>0?r=this[t]-1:this.som.torus&&(r=this.som.gridDim[t]-1),"undefined"!=typeof r){var o,n;"x"===t?(o=r,n=this.y):(o=this.x,n=r),this.neighbors[t][0]=this.som.nodes[o][n]}var i;this[t]s?(o=i[0],n=-1):(o=i[1],n=1)}else o=i[0],n=-1;else o=i[1],n=1;var h=1-e(r,this.weights),u=1-e(r,o.weights),f=(h-u)/(2-h-u);return.5+.5*f*n},o.prototype.getPosition=function(t){return[this.getPos("x",t),this.getPos("y",t)]},r.exports=o},{}]},{},[1])(1)}); \ No newline at end of file +// ml@v0.2.0, MIT licensed. https://github.com/mljs/ml +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r;"undefined"!=typeof window?r=window:"undefined"!=typeof global?r=global:"undefined"!=typeof self&&(r=self),r.ML=t()}}(function(){var define,module,exports;return function t(r,n,o){function e(s,a){if(!n[s]){if(!r[s]){var h="function"==typeof require&&require;if(!a&&h)return h(s,!0);if(i)return i(s,!0);var f=new Error("Cannot find module '"+s+"'");throw f.code="MODULE_NOT_FOUND",f}var u=n[s]={exports:{}};r[s][0].call(u.exports,function(t){var n=r[s][1][t];return e(n?n:t)},u,u.exports,t,r,n,o)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;sn;n++)e+=(t[n]-r[n])*(t[n]-r[n])*(t[n]+r[n])/(t[n]*r[n]);return 2*e}},{}],3:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0,i=0,s=0;n>s;s++)i=Math.abs(t[s]-r[s]),e+=i,i>o&&(o=i);return(o+e)/2}},{}],4:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0;n>e;e++)o+=Math.sqrt(t[e]*r[e]);return-Math.log(o)}},{}],5:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0;n>e;e++)o+=Math.abs(t[e]-r[e])/(t[e]+r[e]);return o}},{}],6:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0,i=0;n>i;i++)e=Math.abs(t[i]-r[i]),e>o&&(o=e);return o}},{}],7:[function(t,r){r.exports=function(t,r){for(var n=0,o=t.length,e=0;o>n;n++)e+=Math.sqrt((t[n]-r[n])*(t[n]-r[n])/((t[n]+r[n])*(t[n]+r[n])));return 2*e}},{}],8:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0,i=0,s=0;n>s;s++)o+=t[s]*r[s],e+=t[s]*t[s],i+=r[s]*r[s];return o/(Math.sqrt(e)*Math.sqrt(i))}},{}],9:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0,i=0;n>i;i++)o+=Math.min(t[i],r[i]),e+=t[i]+r[i];return 1-2*o/e}},{}],10:[function(t,r){var n=t("./czekanowski");r.exports=function(t,r){return 1-n(t,r)}},{"./czekanowski":9}],11:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0,i=0,s=0;n>s;s++)o+=t[s]*t[s],e+=r[s]*r[s],i+=(t[s]-r[s])*(t[s]-r[s]);return i/(o+e)}},{}],12:[function(t,r){var n=t("./dice");r.exports=function(t,r){return 1-n(t,r)}},{"./dice":11}],13:[function(t,r){r.exports=function(t,r){for(var n=0,o=t.length,e=0;o>n;n++)e+=(t[n]-r[n])*(t[n]-r[n])/((t[n]+r[n])*(t[n]+r[n]));return 2*e}},{}],14:[function(t,r){var n=t("./squared-euclidean");r.exports=function(t,r){return Math.sqrt(n(t,r))}},{"./squared-euclidean":44}],15:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0;n>e;e++)o+=Math.sqrt(t[e]*r[e]);return o}},{}],16:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0;n>e;e++)o+=Math.abs(t[e]-r[e]);return o/n}},{}],17:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0;n>e;e++)o+=t[e]*r[e]/(t[e]+r[e]);return 2*o}},{}],18:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0;n>e;e++)o+=Math.sqrt(t[e]*r[e]);return 2*Math.sqrt(1-o)}},{}],19:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0;n>e;e++)o+=t[e]*r[e];return o}},{}],20:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0;n>e;e++)o+=Math.min(t[e],r[e]);return 1-o}},{}],21:[function(t,r){var n=t("./intersection");r.exports=function(t,r){return 1-n(t,r)}},{"./intersection":20}],22:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0,i=0,s=0,a=0;n>a;a++)o+=t[a]*r[a],e+=t[a]*t[a],i+=r[a]*r[a],s+=(t[a]-r[a])*(t[a]-r[a]);return s/(e+i-o)}},{}],23:[function(t,r){var n=t("./jaccard");r.exports=function(t,r){return 1-n(t,r)}},{"./jaccard":22}],24:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0;n>e;e++)o+=(t[e]-r[e])*Math.log(t[e]/r[e]);return o}},{}],25:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0;n>e;e++)o+=(t[e]*Math.log(t[e])+r[e]*Math.log(r[e]))/2-(t[e]+r[e])/2*Math.log((t[e]+r[e])/2);return o}},{}],26:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0,i=0;n>i;i++)o+=t[i]*Math.log(2*t[i]/(t[i]+r[i])),e+=r[i]*Math.log(2*r[i]/(t[i]+r[i]));return(o+e)/2}},{}],27:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0;n>e;e++)o+=t[e]*Math.log(2*t[e]/(t[e]+r[e]));return o}},{}],28:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0,i=0;n>i;i++)o+=Math.abs(t[i]-r[i]),e+=Math.min(t[i],r[i]);return o/e}},{}],29:[function(t,r){var n=t("./kulczynski");r.exports=function(t,r){return 1/n(t,r)}},{"./kulczynski":28}],30:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0;n>e;e++)o+=t[e]*Math.log(t[e]/r[e]);return o}},{}],31:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0,i=0,s=0;n>s;s++)o+=t[s]*r[s],e+=t[s]*t[s],i+=r[s]*r[s];return o/(e+i-o)}},{}],32:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0;n>e;e++)o+=Math.pow(t[e]*t[e]-r[e]*r[e],2)/(2*Math.pow(t[e]*r[e],1.5));return o}},{}],33:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0;n>e;e++)o+=Math.log(Math.abs(t[e]-r[e])+1);return o}},{}],34:[function(t,r){r.exports=function(t,r){for(var n=0,o=t.length,e=0;o>n;n++)e+=Math.abs(t[n]-r[n]);return e}},{}],35:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0;n>e;e++)o+=Math.sqrt(t[e]*r[e]);return Math.sqrt(2-2*o)}},{}],36:[function(t,r){r.exports=function(t,r,n){for(var o=0,e=t.length,i=0;e>o;o++)i+=Math.pow(Math.abs(t[o]-r[o]),n);return Math.pow(i,1/n)}},{}],37:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0,i=0;n>i;i++)o+=Math.min(t[i],r[i]),e+=t[i]+r[i];return 1-o/e}},{}],38:[function(t,r){r.exports=function(t,r){for(var n=0,o=t.length,e=0;o>n;n++)e+=(t[n]-r[n])*(t[n]-r[n])/t[n];return e}},{}],39:[function(t,r){r.exports=function(t,r){for(var n=0,o=t.length,e=0;o>n;n++)e+=(t[n]-r[n])*(t[n]-r[n])/r[n];return e}},{}],40:[function(t,r){r.exports=function(t,r){for(var n=0,o=t.length,e=0;o>n;n++)e+=(t[n]-r[n])*(t[n]-r[n])/(t[n]+r[n]);return 2*e}},{}],41:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0,i=0;n>i;i++)o+=Math.min(t[i],r[i]),e+=Math.max(t[i],r[i]);return o/e}},{}],42:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0,i=0;n>i;i++)o+=Math.abs(t[i]-r[i]),e+=Math.max(t[i],r[i]);return o/e}},{}],43:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0,i=0;n>i;i++)o+=Math.abs(t[i]-r[i]),e+=t[i]+r[i];return o/e}},{}],44:[function(t,r){r.exports=function(t,r){for(var n=0,o=t.length,e=0;o>n;n++)e+=(t[n]-r[n])*(t[n]-r[n]);return e}},{}],45:[function(t,r){r.exports=function(t,r){for(var n=0,o=t.length,e=0;o>n;n++)e+=(t[n]-r[n])*(t[n]-r[n])/(t[n]+r[n]);return e}},{}],46:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0;n>e;e++)o+=(Math.sqrt(t[e])-Math.sqrt(r[e]))*(Math.sqrt(t[e])-Math.sqrt(r[e]));return o}},{}],47:[function(t,r){var n=t("./squaredChord");r.exports=function(t,r){return 1-n(t,r)}},{"./squaredChord":46}],48:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0;n>e;e++)o+=(t[e]+r[e])/2*Math.log((t[e]+r[e])/(2*Math.sqrt(t[e]*r[e])));return o}},{}],49:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0,i=0,s=0;n>s;s++)o+=t[s],e+=r[s],i+=Math.min(t[s],r[s]);return(o+e-2*i)/(o+e-i)}},{}],50:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0;n>e;e++)o+=t[e]*Math.log(2*t[e]/(t[e]+r[e]))+r[e]*Math.log(2*r[e]/(t[e]+r[e]));return o}},{}],51:[function(t,r){r.exports=function(t,r){for(var n=t.length,o=0,e=0;n>e;e++)o+=1-Math.min(t[e],r[e])/Math.max(t[e],r[e]);return o}},{}],52:[function(t,r,n){n.euclidean=t("./dist/euclidean"),n.squaredEuclidean=t("./dist/squared-euclidean"),n.manhattan=t("./dist/manhattan"),n.minkowski=t("./dist/minkowski"),n.chebyshev=t("./dist/chebyshev"),n.sorensen=t("./dist/sorensen"),n.gower=t("./dist/gower"),n.soergel=t("./dist/soergel"),n.kulczynski=t("./dist/kulczynski"),n.kulczynskiS=t("./dist/kulczynskiS"),n.canberra=t("./dist/canberra"),n.lorentzian=t("./dist/lorentzian"),n.intersection=t("./dist/intersection"),n.intersectionS=t("./dist/intersectionS"),n.waveHedges=t("./dist/waveHedges"),n.czekanowski=t("./dist/czekanowski"),n.czekanowskiS=t("./dist/czekanowskiS"),n.motyka=t("./dist/motyka"),n.kulczynskiS=t("./dist/kulczynskiS"),n.ruzicka=t("./dist/ruzicka"),n.tanimoto=t("./dist/tanimoto"),n.innerProduct=t("./dist/innerProduct"),n.harmonicMean=t("./dist/harmonicMean"),n.cosine=t("./dist/cosine"),n.kumarHassebrook=t("./dist/kumarHassebrook"),n.jaccard=t("./dist/jaccard"),n.jaccardS=t("./dist/jaccardS"),n.dice=t("./dist/dice"),n.diceS=t("./dist/diceS"),n.fidelity=t("./dist/fidelity"),n.bhattacharyya=t("./dist/bhattacharyya"),n.hellinger=t("./dist/hellinger"),n.matusita=t("./dist/matusita"),n.squaredChord=t("./dist/squaredChord"),n.squaredChordS=t("./dist/squaredChordS"),n.pearson=t("./dist/pearson"),n.neyman=t("./dist/neyman"),n.squared=t("./dist/squared"),n.probabilisticSymmetric=t("./dist/probabilisticSymmetric"),n.divergence=t("./dist/divergence"),n.clark=t("./dist/clark"),n.additiveSymmetric=t("./dist/additiveSymmetric"),n.kullbackLeibler=t("./dist/kullbackLeibler"),n.jeffreys=t("./dist/jeffreys"),n.kdivergence=t("./dist/kdivergence"),n.topsoe=t("./dist/topsoe"),n.jensenShannon=t("./dist/jensenShannon"),n.jensenDifference=t("./dist/jensenDifference"),n.taneja=t("./dist/taneja"),n.kumarJohnson=t("./dist/kumarJohnson"),n.avg=t("./dist/avg")},{"./dist/additiveSymmetric":2,"./dist/avg":3,"./dist/bhattacharyya":4,"./dist/canberra":5,"./dist/chebyshev":6,"./dist/clark":7,"./dist/cosine":8,"./dist/czekanowski":9,"./dist/czekanowskiS":10,"./dist/dice":11,"./dist/diceS":12,"./dist/divergence":13,"./dist/euclidean":14,"./dist/fidelity":15,"./dist/gower":16,"./dist/harmonicMean":17,"./dist/hellinger":18,"./dist/innerProduct":19,"./dist/intersection":20,"./dist/intersectionS":21,"./dist/jaccard":22,"./dist/jaccardS":23,"./dist/jeffreys":24,"./dist/jensenDifference":25,"./dist/jensenShannon":26,"./dist/kdivergence":27,"./dist/kulczynski":28,"./dist/kulczynskiS":29,"./dist/kullbackLeibler":30,"./dist/kumarHassebrook":31,"./dist/kumarJohnson":32,"./dist/lorentzian":33,"./dist/manhattan":34,"./dist/matusita":35,"./dist/minkowski":36,"./dist/motyka":37,"./dist/neyman":38,"./dist/pearson":39,"./dist/probabilisticSymmetric":40,"./dist/ruzicka":41,"./dist/soergel":42,"./dist/sorensen":43,"./dist/squared":45,"./dist/squared-euclidean":44,"./dist/squaredChord":46,"./dist/squaredChordS":47,"./dist/taneja":48,"./dist/tanimoto":49,"./dist/topsoe":50,"./dist/waveHedges":51}],53:[function(t,r){"use strict";function n(t){if(t=M.checkMatrix(t),!t.isSquare())throw new Error("Matrix is not a square matrix");var r,n,a=t.columns,f=M.zeros(a,a),u=new Array(a),c=new Array(a),l=t;if(t.isSymmetric()){for(r=0;a>r;r++)for(n=0;a>n;n++)f[r][n]=l[r][n];o(a,c,u,f),e(a,c,u,f)}else{var d=M.zeros(a,a),m=new Array(a);for(n=0;a>n;n++)for(r=0;a>r;r++)d[r][n]=l[r][n];i(a,d,m,f),s(a,c,u,f,d)}return new h(a,c,u,f)}function o(t,r,n,o){var e,i,s,a,h,f,u,c;for(h=0;t>h;h++)n[h]=o[t-1][h];for(a=t-1;a>0;a--){for(c=0,s=0,f=0;a>f;f++)c+=Math.abs(n[f]);if(0===c)for(r[a]=n[a-1],h=0;a>h;h++)n[h]=o[a-1][h],o[a][h]=0,o[h][a]=0;else{for(f=0;a>f;f++)n[f]/=c,s+=n[f]*n[f];for(e=n[a-1],i=Math.sqrt(s),e>0&&(i=-i),r[a]=c*i,s-=e*i,n[a-1]=e-i,h=0;a>h;h++)r[h]=0;for(h=0;a>h;h++){for(e=n[h],o[h][a]=e,i=r[h]+o[h][h]*e,f=h+1;a-1>=f;f++)i+=o[f][h]*n[f],r[f]+=o[f][h]*e;r[h]=i}for(e=0,h=0;a>h;h++)r[h]/=s,e+=r[h]*n[h];for(u=e/(s+s),h=0;a>h;h++)r[h]-=u*n[h];for(h=0;a>h;h++){for(e=n[h],i=r[h],f=h;a-1>=f;f++)o[f][h]-=e*r[f]+i*n[f];n[h]=o[a-1][h],o[a][h]=0}}n[a]=s}for(a=0;t-1>a;a++){if(o[t-1][a]=o[a][a],o[a][a]=1,s=n[a+1],0!==s){for(f=0;a>=f;f++)n[f]=o[f][a+1]/s;for(h=0;a>=h;h++){for(i=0,f=0;a>=f;f++)i+=o[f][a+1]*o[f][h];for(f=0;a>=f;f++)o[f][h]-=i*n[f]}}for(f=0;a>=f;f++)o[f][a+1]=0}for(h=0;t>h;h++)n[h]=o[t-1][h],o[t-1][h]=0;o[t-1][t-1]=1,r[0]=0}function e(t,r,n,o){var e,i,s,a,h,f,u,c,l,d,m,p,v,y,w,M,x;for(s=1;t>s;s++)r[s-1]=r[s];r[t-1]=0;var b=0,k=0,A=Math.pow(2,-52);for(f=0;t>f;f++){for(k=Math.max(k,Math.abs(n[f])+Math.abs(r[f])),u=f;t>u&&!(Math.abs(r[u])<=A*k);)u++;if(u>f){x=0;do{for(x+=1,e=n[f],c=(n[f+1]-e)/(2*r[f]),l=g(c,1),0>c&&(l=-l),n[f]=r[f]/(c+l),n[f+1]=r[f]*(c+l),d=n[f+1],i=e-n[f],s=f+2;t>s;s++)n[s]-=i;for(b+=i,c=n[u],m=1,p=m,v=m,y=r[f+1],w=0,M=0,s=u-1;s>=f;s--)for(v=p,p=m,M=w,e=m*r[s],i=m*c,l=g(c,r[s]),r[s+1]=w*l,w=r[s]/l,m=c/l,c=m*n[s]-w*e,n[s+1]=i+w*(m*e+w*n[s]),h=0;t>h;h++)i=o[h][s+1],o[h][s+1]=w*o[h][s]+m*i,o[h][s]=m*o[h][s]-w*i;c=-w*M*v*y*r[f]/d,r[f]=w*c,n[f]=m*c}while(Math.abs(r[f])>A*k)}n[f]=n[f]+b,r[f]=0}for(s=0;t-1>s;s++){for(h=s,c=n[s],a=s+1;t>a;a++)n[a]a;a++)c=o[a][s],o[a][s]=o[a][h],o[a][h]=c}}function i(t,r,n,o){var e,i,s,a,h,f,u,c=0,l=t-1;for(f=c+1;l-1>=f;f++){for(u=0,a=f;l>=a;a++)u+=Math.abs(r[a][f-1]);if(0!==u){for(s=0,a=l;a>=f;a--)n[a]=r[a][f-1]/u,s+=n[a]*n[a];for(i=Math.sqrt(s),n[f]>0&&(i=-i),s-=n[f]*i,n[f]=n[f]-i,h=f;t>h;h++){for(e=0,a=l;a>=f;a--)e+=n[a]*r[a][h];for(e/=s,a=f;l>=a;a++)r[a][h]-=e*n[a]}for(a=0;l>=a;a++){for(e=0,h=l;h>=f;h--)e+=n[h]*r[a][h];for(e/=s,h=f;l>=h;h++)r[a][h]-=e*n[h]}n[f]=u*n[f],r[f][f-1]=u*i}}for(a=0;t>a;a++)for(h=0;t>h;h++)o[a][h]=a===h?1:0;for(f=l-1;f>=c+1;f--)if(0!==r[f][f-1]){for(a=f+1;l>=a;a++)n[a]=r[a][f-1];for(h=f;l>=h;h++){for(i=0,a=f;l>=a;a++)i+=n[a]*o[a][h];for(i=i/n[f]/r[f][f-1],a=f;l>=a;a++)o[a][h]+=i*n[a]}}}function s(t,r,n,o,e){var i,s,h,f,u,c,l,d,m,p,v,g,y,w,M,x=t-1,b=0,k=t-1,A=Math.pow(2,-52),S=0,q=0,j=0,R=0,D=0,z=0,C=0,O=0;for(i=0;t>i;i++)for((b>i||i>k)&&(n[i]=e[i][i],r[i]=0),s=Math.max(i-1,0);t>s;s++)q+=Math.abs(e[i][s]);for(;x>=b;){for(f=x;f>b&&(z=Math.abs(e[f-1][f-1])+Math.abs(e[f][f]),0===z&&(z=q),!(Math.abs(e[f][f-1])=0){for(C=j>=0?j+C:j-C,n[x-1]=d+C,n[x]=n[x-1],0!==C&&(n[x]=d-l/C),r[x-1]=0,r[x]=0,d=e[x][x-1],z=Math.abs(d)+Math.abs(C),j=d/z,R=C/z,D=Math.sqrt(j*j+R*R),j/=D,R/=D,s=x-1;t>s;s++)C=e[x-1][s],e[x-1][s]=R*C+j*e[x][s],e[x][s]=R*e[x][s]-j*C;for(i=0;x>=i;i++)C=e[i][x-1],e[i][x-1]=R*C+j*e[i][x],e[i][x]=R*e[i][x]-j*C;for(i=b;k>=i;i++)C=o[i][x-1],o[i][x-1]=R*C+j*o[i][x],o[i][x]=R*o[i][x]-j*C}else n[x-1]=d+j,n[x]=d+j,r[x-1]=C,r[x]=-C;x-=2,O=0}else{if(d=e[x][x],m=0,l=0,x>f&&(m=e[x-1][x-1],l=e[x][x-1]*e[x-1][x]),10===O){for(S+=d,i=b;x>=i;i++)e[i][i]-=d;z=Math.abs(e[x][x-1])+Math.abs(e[x-1][x-2]),d=m=.75*z,l=-.4375*z*z}if(30===O&&(z=(m-d)/2,z=z*z+l,z>0)){for(z=Math.sqrt(z),d>m&&(z=-z),z=d-l/((m-d)/2+z),i=b;x>=i;i++)e[i][i]-=z;S+=z,d=m=l=.964}for(O+=1,u=x-2;u>=f&&(C=e[u][u],D=d-C,z=m-C,j=(D*z-l)/e[u+1][u]+e[u][u+1],R=e[u+1][u+1]-C-D-z,D=e[u+2][u+1],z=Math.abs(j)+Math.abs(R)+Math.abs(D),j/=z,R/=z,D/=z,u!==f)&&!(Math.abs(e[u][u-1])*(Math.abs(R)+Math.abs(D))=i;i++)e[i][i-2]=0,i>u+2&&(e[i][i-3]=0);for(h=u;x-1>=h&&(w=h!==x-1,h!==u&&(j=e[h][h-1],R=e[h+1][h-1],D=w?e[h+2][h-1]:0,d=Math.abs(j)+Math.abs(R)+Math.abs(D),0!==d&&(j/=d,R/=d,D/=d)),0!==d);h++)if(z=Math.sqrt(j*j+R*R+D*D),0>j&&(z=-z),0!==z){for(h!==u?e[h][h-1]=-z*d:f!==u&&(e[h][h-1]=-e[h][h-1]),j+=z,d=j/z,m=R/z,C=D/z,R/=j,D/=j,s=h;t>s;s++)j=e[h][s]+R*e[h+1][s],w&&(j+=D*e[h+2][s],e[h+2][s]=e[h+2][s]-j*C),e[h][s]=e[h][s]-j*d,e[h+1][s]=e[h+1][s]-j*m;for(i=0;i<=Math.min(x,h+3);i++)j=d*e[i][h]+m*e[i][h+1],w&&(j+=C*e[i][h+2],e[i][h+2]=e[i][h+2]-j*D),e[i][h]=e[i][h]-j,e[i][h+1]=e[i][h+1]-j*R;for(i=b;k>=i;i++)j=d*o[i][h]+m*o[i][h+1],w&&(j+=C*o[i][h+2],o[i][h+2]=o[i][h+2]-j*D),o[i][h]=o[i][h]-j,o[i][h+1]=o[i][h+1]-j*R}}}if(0!==q){for(x=t-1;x>=0;x--)if(j=n[x],R=r[x],0===R)for(f=x,e[x][x]=1,i=x-1;i>=0;i--){for(l=e[i][i]-j,D=0,s=f;x>=s;s++)D+=e[i][s]*e[s][x];if(r[i]<0)C=l,z=D;else if(f=i,0===r[i]?e[i][x]=0!==l?-D/l:-D/(A*q):(d=e[i][i+1],m=e[i+1][i],R=(n[i]-j)*(n[i]-j)+r[i]*r[i],c=(d*z-C*D)/R,e[i][x]=c,e[i+1][x]=Math.abs(d)>Math.abs(C)?(-D-l*c)/d:(-z-m*c)/C),c=Math.abs(e[i][x]),A*c*c>1)for(s=i;x>=s;s++)e[s][x]=e[s][x]/c}else if(0>R)for(f=x-1,Math.abs(e[x][x-1])>Math.abs(e[x-1][x])?(e[x-1][x-1]=R/e[x][x-1],e[x-1][x]=-(e[x][x]-j)/e[x][x-1]):(M=a(0,-e[x-1][x],e[x-1][x-1]-j,R),e[x-1][x-1]=M[0],e[x-1][x]=M[1]),e[x][x-1]=0,e[x][x]=1,i=x-2;i>=0;i--){for(p=0,v=0,s=f;x>=s;s++)p+=e[i][s]*e[s][x-1],v+=e[i][s]*e[s][x];if(l=e[i][i]-j,r[i]<0)C=l,D=p,z=v;else if(f=i,0===r[i]?(M=a(-p,-v,l,R),e[i][x-1]=M[0],e[i][x]=M[1]):(d=e[i][i+1],m=e[i+1][i],g=(n[i]-j)*(n[i]-j)+r[i]*r[i]-R*R,y=2*(n[i]-j)*R,0===g&&0===y&&(g=A*q*(Math.abs(l)+Math.abs(R)+Math.abs(d)+Math.abs(m)+Math.abs(C))),M=a(d*D-C*p+R*v,d*z-C*v-R*p,g,y),e[i][x-1]=M[0],e[i][x]=M[1],Math.abs(d)>Math.abs(C)+Math.abs(R)?(e[i+1][x-1]=(-p-l*e[i][x-1]+R*e[i][x])/d,e[i+1][x]=(-v-l*e[i][x]-R*e[i][x-1])/d):(M=a(-D-m*e[i][x-1],-z-m*e[i][x],C,R),e[i+1][x-1]=M[0],e[i+1][x]=M[1])),c=Math.max(Math.abs(e[i][x-1]),Math.abs(e[i][x])),A*c*c>1)for(s=i;x>=s;s++)e[s][x-1]=e[s][x-1]/c,e[s][x]=e[s][x]/c}for(i=0;t>i;i++)if(b>i||i>k)for(s=i;t>s;s++)o[i][s]=e[i][s];for(s=t-1;s>=b;s--)for(i=b;k>=i;i++){for(C=0,h=b;h<=Math.min(s,k);h++)C+=o[i][h]*e[h][s];o[i][s]=C}}}function a(t,r,n,o){var e,i;return Math.abs(n)>Math.abs(o)?(e=o/n,i=n+e*o,[(t+e*r)/i,(r-e*t)/i]):(e=n/o,i=o+e*n,[(e*t+r)/i,(e*r-t)/i])}function h(t,r,n,o){this.n=t,this.e=r,this.d=n,this.V=o}function f(t){t=M.checkMatrix(t);var r,n,o,e,i,s,a,h,f,c,l=t.clone(),d=l.rows,m=l.columns,p=new Array(d),v=1;for(r=0;d>r;r++)p[r]=r;for(f=new Array(d),n=0;m>n;n++){for(r=0;d>r;r++)f[r]=l[r][n];for(r=0;d>r;r++){for(h=l[r],c=Math.min(r,n),i=0,o=0;c>o;o++)i+=h[o]*f[o];h[n]=f[r]-=i}for(e=n,r=n+1;d>r;r++)Math.abs(f[r])>Math.abs(f[e])&&(e=r);if(e!==n){for(o=0;m>o;o++)s=l[e][o],l[e][o]=l[n][o],l[n][o]=s;a=p[e],p[e]=p[n],p[n]=a,v=-v}if(d>n&&0!==l[n][n])for(r=n+1;d>r;r++)l[r][n]/=l[n][n]}return new u(l,p,v)}function u(t,r,n){this.LU=t,this.pivotVector=r,this.pivotSign=n}function c(t){t=M.checkMatrix(t);var r,n,o,e,i=t.clone(),s=t.rows,a=t.columns,h=new Array(a);for(o=0;a>o;o++){var f=0;for(r=o;s>r;r++)f=g(f,i[r][o]);if(0!==f){for(i[o][o]<0&&(f=-f),r=o;s>r;r++)i[r][o]/=f;for(i[o][o]+=1,n=o+1;a>n;n++){for(e=0,r=o;s>r;r++)e+=i[r][o]*i[r][n];for(e=-e/i[o][o],r=o;s>r;r++)i[r][n]+=e*i[r][o]}}h[o]=-f}return new l(i,h)}function l(t,r){this.QR=t,this.Rdiag=r}function d(t,r){t=M.checkMatrix(t),r=r||{};var n=t.clone(),o=t.rows,e=t.columns,i=Math.min(o,e),s=!0,a=!0;r.computeLeftSingularVectors===!1&&(s=!1),r.computeRightSingularVectors===!1&&(a=!1);var h=r.autoTranspose===!0,f=!1;if(e>o)if(h){n=n.transpose(),o=n.rows,e=n.columns,f=!0;var u=s;s=a,a=u}else console.warn("WARNING: Computing SVD on a matrix with more columns than rows.");var c,l,d,p,v,y,w,x,b,k,A,S,q,j,R,D,z,C,O,I,V,E=new Array(Math.min(o+1,e)),U=M.zeros(o,i),L=M.zeros(e,e),N=new Array(e),_=new Array(o),T=Math.min(o-1,e),P=Math.max(0,Math.min(e-2,o));for(d=0,k=Math.max(T,P);k>d;d++){if(T>d){for(E[d]=0,c=d;o>c;c++)E[d]=g(E[d],n[c][d]);if(0!==E[d]){for(n[d][d]<0&&(E[d]=-E[d]),c=d;o>c;c++)n[c][d]/=E[d];n[d][d]+=1}E[d]=-E[d]}for(l=d+1;e>l;l++){if(T>d&&0!==E[d]){for(v=0,c=d;o>c;c++)v+=n[c][d]*n[c][l];for(v=-v/n[d][d],c=d;o>c;c++)n[c][l]+=v*n[c][d]}N[l]=n[d][l]}if(s&&T>d)for(c=d;o>c;c++)U[c][d]=n[c][d];if(P>d){for(N[d]=0,c=d+1;e>c;c++)N[d]=g(N[d],N[c]);if(0!==N[d]){for(N[d+1]<0&&(N[d]=-N[d]),c=d+1;e>c;c++)N[c]/=N[d];N[d+1]+=1}if(N[d]=-N[d],o>d+1&&0!==N[d]){for(c=d+1;o>c;c++)_[c]=0;for(l=d+1;e>l;l++)for(c=d+1;o>c;c++)_[c]+=N[l]*n[c][l];for(l=d+1;e>l;l++)for(v=-N[l]/N[d+1],c=d+1;o>c;c++)n[c][l]+=v*_[c]}if(a)for(c=d+1;e>c;c++)L[c][d]=N[c]}}if(p=Math.min(e,o+1),e>T&&(E[T]=n[T][T]),p>o&&(E[p-1]=0),p>P+1&&(N[P]=n[P][p-1]),N[p-1]=0,s){for(l=T;i>l;l++){for(c=0;o>c;c++)U[c][l]=0;U[l][l]=1}for(d=T-1;d>=0;d--)if(0!==E[d]){for(l=d+1;i>l;l++){for(v=0,c=d;o>c;c++)v+=U[c][d]*U[c][l];for(v=-v/U[d][d],c=d;o>c;c++)U[c][l]+=v*U[c][d]}for(c=d;o>c;c++)U[c][d]=-U[c][d];for(U[d][d]=1+U[d][d],c=0;d-1>c;c++)U[c][d]=0}else{for(c=0;o>c;c++)U[c][d]=0;U[d][d]=1}}if(a)for(d=e-1;d>=0;d--){if(P>d&&0!==N[d])for(l=d+1;e>l;l++){for(v=0,c=d+1;e>c;c++)v+=L[c][d]*L[c][l];for(v=-v/L[d+1][d],c=d+1;e>c;c++)L[c][l]+=v*L[c][d]}for(c=0;e>c;c++)L[c][d]=0;L[d][d]=1}for(var H=p-1,Q=0,W=Math.pow(2,-52);p>0;){for(d=p-2;d>=-1&&-1!==d;d--)if(Math.abs(N[d])<=W*(Math.abs(E[d])+Math.abs(E[d+1]))){N[d]=0;break}if(d===p-2)A=4;else{for(y=p-1;y>=d&&y!==d;y--)if(v=(y!==p?Math.abs(N[y]):0)+(y!==d+1?Math.abs(N[y-1]):0),Math.abs(E[y])<=W*v){E[y]=0;break}y===d?A=3:y===p-1?A=1:(A=2,d=y)}switch(d++,A){case 1:for(w=N[p-2],N[p-2]=0,l=p-2;l>=d;l--)if(v=g(E[l],w),x=E[l]/v,b=w/v,E[l]=v,l!==d&&(w=-b*N[l-1],N[l-1]=x*N[l-1]),a)for(c=0;e>c;c++)v=x*L[c][l]+b*L[c][p-1],L[c][p-1]=-b*L[c][l]+x*L[c][p-1],L[c][l]=v;break;case 2:for(w=N[d-1],N[d-1]=0,l=d;p>l;l++)if(v=g(E[l],w),x=E[l]/v,b=w/v,E[l]=v,w=-b*N[l],N[l]=x*N[l],s)for(c=0;o>c;c++)v=x*U[c][l]+b*U[c][d-1],U[c][d-1]=-b*U[c][l]+x*U[c][d-1],U[c][l]=v;break;case 3:for(S=Math.max(Math.max(Math.max(Math.max(Math.abs(E[p-1]),Math.abs(E[p-2])),Math.abs(N[p-2])),Math.abs(E[d])),Math.abs(N[d])),q=E[p-1]/S,j=E[p-2]/S,R=N[p-2]/S,D=E[d]/S,z=N[d]/S,C=((j+q)*(j-q)+R*R)/2,O=q*R*q*R,I=0,(0!==C||0!==O)&&(I=Math.sqrt(C*C+O),0>C&&(I=-I),I=O/(C+I)),w=(D+q)*(D-q)+I,V=D*z,l=d;p-1>l;l++){if(v=g(w,V),x=w/v,b=V/v,l!==d&&(N[l-1]=v),w=x*E[l]+b*N[l],N[l]=x*N[l]-b*E[l],V=b*E[l+1],E[l+1]=x*E[l+1],a)for(c=0;e>c;c++)v=x*L[c][l]+b*L[c][l+1],L[c][l+1]=-b*L[c][l]+x*L[c][l+1],L[c][l]=v;if(v=g(w,V),x=w/v,b=V/v,E[l]=v,w=x*N[l]+b*E[l+1],E[l+1]=-b*N[l]+x*E[l+1],V=b*N[l+1],N[l+1]=x*N[l+1],s&&o-1>l)for(c=0;o>c;c++)v=x*U[c][l]+b*U[c][l+1],U[c][l+1]=-b*U[c][l]+x*U[c][l+1],U[c][l]=v}N[p-2]=w,Q+=1;break;case 4:if(E[d]<=0&&(E[d]=E[d]<0?-E[d]:0,a))for(c=0;H>=c;c++)L[c][d]=-L[c][d];for(;H>d&&!(E[d]>=E[d+1]);){if(v=E[d],E[d]=E[d+1],E[d+1]=v,a&&e-1>d)for(c=0;e>c;c++)v=L[c][d+1],L[c][d+1]=L[c][d],L[c][d]=v;if(s&&o-1>d)for(c=0;o>c;c++)v=U[c][d+1],U[c][d+1]=U[c][d],U[c][d]=v;d++}Q=0,p--}}if(f){var B=L;L=U,U=B}return new m(o,e,E,U,L)}function m(t,r,n,o,e){this.m=t,this.n=r,this.s=n,this.U=o,this.V=e}function p(t){if(t=M.checkMatrix(t),!t.isSymmetric())throw new Error("Matrix is not symmetric");var r,n,o,e=t,i=e.rows,s=new M(i,i),a=!0;for(n=0;i>n;n++){var h=s[n],f=0;for(o=0;n>o;o++){var u=s[o],c=0;for(r=0;o>r;r++)c+=u[r]*h[r];h[o]=c=(e[n][o]-c)/s[o][o],f+=c*c}for(f=e[n][n]-f,a&=f>0,s[n][n]=Math.sqrt(Math.max(f,0)),o=n+1;i>o;o++)s[n][o]=0}if(!a)throw new Error("Matrix is not positive definite");return new v(s)}function v(t){this.L=t}function g(t,r){var n;return Math.abs(t)>Math.abs(r)?(n=r/t,Math.abs(t)*Math.sqrt(1+n*n)):0!==r?(n=t/r,Math.abs(r)*Math.sqrt(1+n*n)):0}function y(t){return w(t,M.eye(t.rows))}function w(t,r){return t.isSquare()?new f(t).solve(r):new c(t).solve(r)}var M=t("./matrix");h.prototype={get realEigenvalues(){return this.d},get imaginaryEigenvalues(){return this.e},get eigenvectorMatrix(){return this.V},get diagonalMatrix(){var t,r,n=this.n,o=this.e,e=this.d,i=new M(n,n);for(t=0;n>t;t++){for(r=0;n>r;r++)i[t][r]=0;i[t][t]=e[t],o[t]>0?i[t][t+1]=o[t]:o[t]<0&&(i[t][t-1]=o[t])}return i}},u.prototype={isSingular:function(){for(var t=this.LU,r=t.columns,n=0;r>n;n++)if(0===t[n][n])return!0;return!1},get determinant(){var t=this.LU;if(!t.isSquare())throw new Error("Matrix must be square");for(var r=this.pivotSign,n=t.columns,o=0;n>o;o++)r*=t[o][o];return r},get lowerTriangularFactor(){for(var t=this.LU,r=t.rows,n=t.columns,o=new M(r,n),e=0;r>e;e++)for(var i=0;n>i;i++)o[e][i]=e>i?t[e][i]:e===i?1:0;return o},get upperTriangularFactor(){for(var t=this.LU,r=t.rows,n=t.columns,o=new M(r,n),e=0;r>e;e++)for(var i=0;n>i;i++)o[e][i]=i>=e?t[e][i]:0;return o},get pivotPermutationVector(){return this.pivotVector.slice()},solve:function(t){t=M.checkMatrix(t);var r=this.LU,n=r.rows;if(n!==t.rows)throw new Error("Invalid matrix dimensions");if(this.isSingular())throw new Error("LU matrix is singular");var o,e,i,s=t.columns,a=t.subMatrixRow(this.pivotVector,0,s-1),h=r.columns;for(i=0;h>i;i++)for(o=i+1;h>o;o++)for(e=0;s>e;e++)a[o][e]-=a[i][e]*r[o][i];for(i=h-1;i>=0;i--){for(e=0;s>e;e++)a[i][e]/=r[i][i];for(o=0;i>o;o++)for(e=0;s>e;e++)a[o][e]-=a[i][e]*r[o][i]}return a}},l.prototype={solve:function(t){t=M.checkMatrix(t);var r=this.QR,n=r.rows;if(t.rows!==n)throw new Error("Matrix row dimensions must agree");if(!this.isFullRank())throw new Error("Matrix is rank deficient");var o,e,i,s,a=t.columns,h=t.clone(),f=r.columns;for(i=0;f>i;i++)for(e=0;a>e;e++){for(s=0,o=i;n>o;o++)s+=r[o][i]*h[o][e];for(s=-s/r[i][i],o=i;n>o;o++)h[o][e]+=s*r[o][i]}for(i=f-1;i>=0;i--){for(e=0;a>e;e++)h[i][e]/=this.Rdiag[i];for(o=0;i>o;o++)for(e=0;a>e;e++)h[o][e]-=h[i][e]*r[o][i]}return h.subMatrix(0,f-1,0,a-1)},isFullRank:function(){for(var t=this.QR.columns,r=0;t>r;r++)if(0===this.Rdiag[r])return!1;return!0},get upperTriangularFactor(){var t,r,n=this.QR,o=n.columns,e=new M(o,o);for(t=0;o>t;t++)for(r=0;o>r;r++)e[t][r]=r>t?n[t][r]:t===r?this.Rdiag[t]:0;return e},get orthogonalFactor(){var t,r,n,o,e=this.QR,i=e.rows,s=e.columns,a=new M(i,s);for(n=s-1;n>=0;n--){for(t=0;i>t;t++)a[t][n]=0;for(a[n][n]=1,r=n;s>r;r++)if(0!==e[n][n]){for(o=0,t=n;i>t;t++)o+=e[t][n]*a[t][r];for(o=-o/e[n][n],t=n;i>t;t++)a[t][r]+=o*e[t][n]}}return a}},m.prototype={get condition(){return this.s[0]/this.s[Math.min(this.m,this.n)-1]},get norm2(){return this.s[0]},get rank(){for(var t=Math.pow(2,-52),r=Math.max(this.m,this.n)*this.s[0]*t,n=0,o=this.s,e=0,i=o.length;i>e;e++)o[e]>r&&n++;return n},get diagonal(){return this.s},get threshold(){return Math.pow(2,-52)/2*Math.max(this.m,this.n)*this.s[0]},get leftSingularVectors(){return this.U},get rightSingularVectors(){return this.V},get diagonalMatrix(){return M.diag(this.s)},solve:function(t){var r,n=t,o=this.threshold,e=this.s.length,i=M.zeros(e,e);for(r=0;e>r;r++)i[r][r]=Math.abs(this.s[r])<=o?0:1/this.s[r];var s,a,h,f=this.V.mmul(i),u=this.V.rows,c=this.U.rows,l=M.zeros(u,c);for(r=0;u>r;r++)for(s=0;c>s;s++){for(h=0,a=0;e>a;a++)h+=f[r][a]*this.U[s][a];l[r][s]=h}return l.mmul(n)},solveForDiagonal:function(t){return this.solve(M.diag(t))},inverse:function(){var t,r,n=this.threshold,o=this.V.rows,e=this.V.columns,i=new M(o,this.s.length);for(t=0;o>t;t++)for(r=0;e>r;r++)Math.abs(this.s[r])>n&&(i[t][r]=this.V[t][r]/this.s[r]);var s,a,h=this.U.rows,f=this.U.columns,u=new M(o,h);for(t=0;o>t;t++)for(r=0;h>r;r++){for(a=0,s=0;f>s;s++)a+=i[t][s]*this.U[r][s];u[t][r]=a}return u}},v.prototype={get leftTriangularFactor(){return this.L},solve:function(t){t=M.checkMatrix(t);var r=this.L,n=r.rows;if(t.rows!==n)throw new Error("Matrix dimensions do not match");var o,e,i,s=t.columns,a=t.clone();for(i=0;n>i;i++)for(e=0;s>e;e++){for(o=0;i>o;o++)a[i][e]-=a[o][e]*r[i][o];a[i][e]/=r[i][i]}for(i=n-1;i>=0;i--)for(e=0;s>e;e++){for(o=i+1;n>o;o++)a[i][e]-=a[o][e]*r[o][i];a[i][e]/=r[i][i]}return a}},r.exports={LuDecomposition:f,LU:f,QrDecomposition:c,QR:c,SingularValueDecomposition:d,SVD:d,EigenvalueDecomposition:n,EVD:n,CholeskyDecomposition:p,CHO:p,inverse:y,solve:w}},{"./matrix":55}],54:[function(t,r){"use strict";r.exports=t("./matrix"),r.exports.Decompositions=r.exports.DC=t("./decompositions")},{"./decompositions":53,"./matrix":55}],55:[function(t,r){"use strict";function n(t){for(var r=0,n=t.length,o=new Array(n);n>r;r++)o[r]=t[r];return o}function o(t){this.message=t||"Unknown matrix error"}function e(t){throw new o(t)}function i(t,r){var o,s,a=0;if(t instanceof Array)if(s=r,o=s?n(t):t,t=o.length,r=o[0].length,"undefined"==typeof r&&e("Data must be a 2D array"),t>0&&r>0)for(;t>a;a++)o[a].length!==r?e("Inconsistent array dimensions"):s&&(o[a]=n(o[a]));else e("Invalid dimensions: "+t+"x"+r);else if("number"==typeof t)if(t>0&&r>0)for(o=new Array(t);t>a;a++)o[a]=new Array(r);else e("Invalid dimensions: "+t+"x"+r);else e("Invalid arguments");return Object.defineProperty(o,"rows",{writable:!0,value:t}),Object.defineProperty(o,"columns",{writable:!0,value:r}),o.__proto__=i.prototype,o}var s=Array.prototype.splice,a=Array.prototype.concat;o.prototype=Object.create(Error.prototype),o.prototype.name="MatrixError",o.prototype.constructor=o,i.from1DArray=function(t,r,n){var o,s,a=0;for(o=t*r,o!==n.length&&e("Data length does not match given dimensions"),s=new Array(t);t>a;a++)s[a]=n.slice(a*r,(a+1)*r);return new i(s)},i.rowVector=function(t){return new i([t])},i.columnVector=function(t){for(var r=t.length,n=new Array(r),o=0;r>o;o++)n[o]=[t[o]];return new i(n)},i.empty=function(t,r){return new i(t,r)},i.zeros=function(t,r){return i.empty(t,r).fill(0)},i.ones=function(t,r){return i.empty(t,r).fill(1)},i.rand=function(t,r){for(var n=i.empty(t,r),o=0,e=n.rows;e>o;o++)for(var s=0,a=n.columns;a>s;s++)n[o][s]=Math.random();return n},i.eye=function(t){for(var r=i.zeros(t,t),n=r.rows,o=0;n>o;o++)r[o][o]=1;return r},i.diag=function(t){for(var r=t.length,n=i.zeros(r,r),o=0;r>o;o++)n[o][o]=t[o];return n},i.indices=function(t,r){for(var n=new Array(r-t),o=0;os&&(s=arguments[r].columns);var a=i.zeros(e,s),h=0;for(r=0;rt||t>this.rows-1)&&e("Row index out of range.")},i.prototype.checkColumnIndex=function(t){(0>t||t>this.columns-1)&&e("Column index out of range.")},i.prototype.checkDimensions=function(t){(this.rows!==t.rows||this.columns!==t.columns)&&e("Matrices dimensions must be equal.")},i.prototype.apply=function(t){for(var r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)t.call(this,o,e);return this},i.prototype.clone=function(){return new i(this.to2DArray())},i.prototype.to1DArray=function(){return a.apply([],this)},i.prototype.to2DArray=function(){for(var t=this.rows,r=new Array(t),o=0;t>o;o++)r[o]=n(this[o]);return r},i.prototype.isRowVector=function(){return 1===this.rows},i.prototype.isColumnVector=function(){return 1===this.columns},i.prototype.isVector=function(){return 1===this.rows||1===this.columns},i.prototype.isSquare=function(){return this.rows===this.columns},i.prototype.isSymmetric=function(){if(this.isSquare()){for(var t=this.rows,r=0;t>r;r++)for(var n=0;r>=n;n++)if(this[r][n]!==this[n][r])return!1;return!0}return!1},i.prototype.set=function(t,r,n){return this[t][r]=n,this},i.prototype.get=function(t,r){return this[t][r]},i.prototype.fill=function(t){for(var r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)this[o][e]=t;return this},i.prototype.neg=function(){return this.mulS(-1)},i.prototype.add=function(t){return"number"==typeof t?this.addS(t):(t=i.checkMatrix(t),this.addM(t))},i.prototype.addS=function(t){for(var r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)this[o][e]+=t;return this},i.prototype.addM=function(t){this.checkDimensions(t);for(var r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)this[o][e]+=t[o][e];return this},i.prototype.sub=function(t){return"number"==typeof t?this.subS(t):(t=i.checkMatrix(t),this.subM(t))},i.prototype.subS=function(t){for(var r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)this[o][e]-=t;return this},i.prototype.subM=function(t){this.checkDimensions(t);for(var r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)this[o][e]-=t[o][e]; +return this},i.prototype.mul=function(t){return"number"==typeof t?this.mulS(t):(t=i.checkMatrix(t),this.mulM(t))},i.prototype.mulS=function(t){for(var r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)this[o][e]*=t;return this},i.prototype.mulM=function(t){this.checkDimensions(t);for(var r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)this[o][e]*=t[o][e];return this},i.prototype.div=function(t){return"number"==typeof t?this.divS(t):(t=i.checkMatrix(t),this.divM(t))},i.prototype.divS=function(t){for(var r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)this[o][e]/=t;return this},i.prototype.divM=function(t){this.checkDimensions(t);for(var r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)this[o][e]/=t[o][e];return this},i.prototype.getRow=function(t){return this.checkRowIndex(t),n(this[t])},i.prototype.setRow=function(t,r){return this.checkRowIndex(t),i.isMatrix(r)&&(r=r.to1DArray()),r.length!==this.columns&&e("Invalid row size"),this[t]=n(r),this},i.prototype.removeRow=function(t){return this.checkRowIndex(t),1===this.rows&&e("A matrix cannot have less than one row"),s.call(this,t,1),this.rows-=1,this},i.prototype.addRow=function(t,r){return"undefined"==typeof r&&(r=t,t=this.rows),(0>t||t>this.rows)&&e("Row index out of range."),i.isMatrix(r)&&(r=r.to1DArray()),r.length!==this.columns&&e("Invalid row size"),s.call(this,t,0,n(r)),this.rows+=1,this},i.prototype.swapRows=function(t,r){this.checkRowIndex(t),this.checkRowIndex(r);var n=this[t];return this[t]=this[r],this[r]=n,this},i.prototype.getColumn=function(t){this.checkColumnIndex(t);for(var r=this.rows,n=new Array(r),o=0;r>o;o++)n[o]=this[o][t];return n},i.prototype.setColumn=function(t,r){this.checkColumnIndex(t),i.isMatrix(r)&&(r=r.to1DArray());var n=this.rows;r.length!==n&&e("Invalid column size");for(var o=0;n>o;o++)this[o][t]=r[o];return this},i.prototype.removeColumn=function(t){this.checkColumnIndex(t),1===this.columns&&e("A matrix cannot have less than one column");for(var r=0,n=this.rows;n>r;r++)this[r].splice(t,1);return this.columns-=1,this},i.prototype.addColumn=function(t,r){"undefined"==typeof r&&(r=t,t=this.columns),(0>t||t>this.columns)&&e("Column index out of range."),i.isMatrix(r)&&(r=r.to1DArray());var n=this.rows;r.length!==n&&e("Invalid column size");for(var o=0;n>o;o++)this[o].splice(t,0,r[o]);return this.columns+=1,this},i.prototype.swapColumns=function(t,r){this.checkRowIndex(t),this.checkRowIndex(r);for(var n,o,e=this.rows,i=0;e>i;i++)o=this[i],n=o[t],o[t]=o[r],o[r]=n;return this},i.prototype.checkRowVector=function(t){return i.isMatrix(t)&&(t=t.to1DArray()),t.length!==this.columns&&e("vector size must be the same as the number of columns"),t},i.prototype.checkColumnVector=function(t){return i.isMatrix(t)&&(t=t.to1DArray()),t.length!==this.rows&&e("vector size must be the same as the number of rows"),t},i.prototype.addRowVector=function(t){t=this.checkRowVector(t);for(var r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)this[o][e]+=t[e];return this},i.prototype.subRowVector=function(t){t=this.checkRowVector(t);for(var r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)this[o][e]-=t[e];return this},i.prototype.mulRowVector=function(t){t=this.checkRowVector(t);for(var r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)this[o][e]*=t[e];return this},i.prototype.divRowVector=function(t){t=this.checkRowVector(t);for(var r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)this[o][e]/=t[e];return this},i.prototype.addColumnVector=function(t){t=this.checkColumnVector(t);for(var r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)this[o][e]+=t[o];return this},i.prototype.subColumnVector=function(t){t=this.checkColumnVector(t);for(var r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)this[o][e]-=t[o];return this},i.prototype.mulColumnVector=function(t){t=this.checkColumnVector(t);for(var r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)this[o][e]*=t[o];return this},i.prototype.divColumnVector=function(t){t=this.checkColumnVector(t);for(var r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)this[o][e]/=t[o];return this},i.prototype.mulRow=function(t,r){this.checkRowIndex(t);for(var n=0,o=this.columns;o>n;n++)this[t][n]*=r;return this},i.prototype.mulColumn=function(t,r){this.checkColumnIndex(t);for(var n=0,o=this.rows;o>n;n++)this[n][t]*=r},i.prototype.max=function(){for(var t=-1/0,r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)this[o][e]>t&&(t=this[o][e]);return t},i.prototype.maxIndex=function(){for(var t=-1/0,r={},n=this.rows,o=this.columns,e=0;n>e;e++)for(var i=0;o>i;i++)this[e][i]>t&&(t=this[e][i],r.row=e,r.column=i);return r},i.prototype.min=function(){for(var t=1/0,r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)this[o][e]e;e++)for(var i=0;o>i;i++)this[e][i]n;n++)this[t][n]>r&&(r=this[t][n]);return r},i.prototype.maxRowIndex=function(t){this.checkRowIndex(t);for(var r=-1/0,n={row:t},o=0,e=this.columns;e>o;o++)this[t][o]>r&&(r=this[t][o],n.column=o);return n},i.prototype.minRow=function(t){this.checkRowIndex(t);for(var r=1/0,n=0,o=this.columns;o>n;n++)this[t][n]o;o++)this[t][o]n;n++)this[n][t]>r&&(r=this[n][t]);return r},i.prototype.maxColumnIndex=function(t){this.checkColumnIndex(t);for(var r=-1/0,n={row:0,column:t},o=0,e=this.rows;e>o;o++)this[o][t]>r&&(r=this[o][t],n.row=o);return n},i.prototype.minColumn=function(t){this.checkColumnIndex(t);for(var r=1/0,n=0,o=this.rows;o>n;n++)this[n][t]o;o++)this[o][t]t;t++)h[t]=this[t][t];return h},i.prototype.sum=function(){for(var t=0,r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)t+=this[o][e];return t},i.prototype.mean=function(){return this.sum()/this.size},i.prototype.prod=function f(){for(var f=1,t=this.rows,r=this.columns,n=0;t>n;n++)for(var o=0;r>o;o++)f*=this[n][o];return f},i.prototype.cumulativeSum=function(){for(var t=0,r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)t+=this[o][e],this[o][e]=t;return this},i.prototype.dot=function u(t){this.size!==t.size&&e("vectors do not have the same size");for(var r=this.to1DArray(),n=t.to1DArray(),u=0,o=r.length,i=0;o>i;i++)u+=r[i]*n[i];return u},i.prototype.mmul=function(t){this.columns!==t.rows&&console.warn("Number of columns of left matrix are not equal to number of rows of right matrix.");var r,n,o,e=this.rows,s=this.columns,a=t.columns,h=new i(e,a),f=new Array(s);for(n=0;a>n;n++){for(o=0;s>o;o++)f[o]=t[o][n];for(r=0;e>r;r++){var u=this[r],c=0;for(o=0;s>o;o++)c+=u[o]*f[o];h[r][n]=c}}return h},i.prototype.sortRows=function(t){for(var r=0,n=this.rows;n>r;r++)this[r].sort(t);return this},i.prototype.sortColumns=function(t){for(var r=0,n=this.columns;n>r;r++)this.setColumn(r,this.getColumn(r).sort(t));return this},i.prototype.transpose=function(){for(var t=new i(this.columns,this.rows),r=this.rows,n=this.columns,o=0;r>o;o++)for(var e=0;n>e;e++)t[e][o]=this[o][e];return t},i.prototype.subMatrix=function(t,r,n,o){(t>r||n>o||0>t||t>=this.rows||0>r||r>=this.rows||0>n||n>=this.columns||0>o||o>=this.columns)&&e("Argument out of range");for(var s=new i(r-t+1,o-n+1),a=t;r>=a;a++)for(var h=n;o>=h;h++)s[a-t][h-n]=this[a][h];return s},i.prototype.subMatrixRow=function(t,r,n){"undefined"==typeof r?(r=0,n=this.columns-1):"undefined"==typeof n&&(n=this.columns-1),(r>n||0>r||r>=this.columns||0>n||n>=this.columns)&&e("Argument out of range.");for(var o=t.length,s=this.rows,a=new i(o,n-r+1),h=0;o>h;h++)for(var f=r;n>=f;f++)(t[h]<0||t[h]>=s)&&e("Argument out of range."),a[h][f-r]=this[t[h]][f];return a},i.prototype.subMatrixColumn=function(t,r,n){"undefined"==typeof r?(r=0,n=this.rows-1):"undefined"==typeof n&&(n=this.rows-1),(r>n||0>r||r>=this.rows||0>n||n>=this.rows)&&e("Argument out of range.");for(var o=t.length,s=this.columns,a=new i(n-r+1,o),h=0;o>h;h++)for(var f=r;n>=f;f++)(t[h]<0||t[h]>=s)&&e("Argument out of range."),a[f-r][h]=this[f][t[h]];return a},i.prototype.trace=function c(){this.isSquare()||e("The matrix is not square");for(var c=0,t=0,r=this.rows;r>t;t++)c+=this[t][t];return c},i.prototype.abs=function(){for(var t=this.rows,r=this.columns,n=0;t>n;n++)for(var o=0;r>o;o++)this[n][o]=Math.abs(this[n][o])},i.MatrixError=o,r.exports=i},{}],56:[function(require,module,exports){"use strict";function SOM(t,r,n,o){this.x=t,this.y=r,n=n||{},this.options={};for(var e in defaultOptions)this.options[e]=n.hasOwnProperty(e)?n[e]:defaultOptions[e];if("number"==typeof this.options.fields)this.numWeights=this.options.fields;else{if(!Array.isArray(this.options.fields))throw new Error("Invalid fields definition");this.numWeights=this.options.fields.length;var i=getConverters(this.options.fields);this.extractor=i.extractor,this.creator=i.creator}if("rect"===this.options.gridType)this.nodeType=NodeSquare,this.gridDim={x:t,y:r};else{this.nodeType=NodeHexagonal;var s=this.x-Math.floor(this.y/2);this.gridDim={x:s,y:this.y,z:-(0-s-this.y)}}if(this.torus=this.options.torus,this.distanceMethod=this.torus?"getDistanceTorus":"getDistance",this.distance=this.options.distance,this.maxDistance=getMaxDistance(this.distance,this.numWeights),o===!0)return void(this.done=!0);if(!(t>0&&r>0))throw new Error("x and y must be positive");this.times={findBMU:0,adjust:0},this.randomizer=this.options.randomizer,this.iterationCount=0,this.iterations=this.options.iterations,this.startLearningRate=this.learningRate=this.options.learningRate,this.mapRadius=Math.floor(Math.max(t,r)/2),this.algorithmMethod=this.options.method,this._initNodes(),this.done=!1}function getConverters(t){for(var r=t.length,n=new Array(r),o=new Array(r),e=0;r>e;e++)n[e]=getNormalizer(t[e].range),o[e]=getDenormalizer(t[e].range);return{extractor:function(o){for(var e=new Array(r),i=0;r>i;i++)e[i]=n[i](o[t[i].name]);return e},creator:function(n){for(var e={},i=0;r>i;i++)e[t[i].name]=o[i](n[i]);return e}}}function getNormalizer(t){return function(r){return(r-t[0])/(t[1]-t[0])}}function getDenormalizer(t){return function(r){return t[0]+r*(t[1]-t[0])}}function squareEuclidean(t,r){for(var n=0,o=0,e=t.length;e>o;o++)n+=(t[o]-r[o])*(t[o]-r[o]);return n}function getRandomValue(t,r){return t[Math.floor(r()*t.length)]}function getMaxDistance(t,r){for(var n=new Array(r),o=new Array(r),e=0;r>e;e++)n[e]=0,o[e]=1;return t(n,o)}var NodeSquare=require("./node-square"),NodeHexagonal=require("./node-hexagonal"),defaultOptions={fields:3,randomizer:Math.random,distance:squareEuclidean,iterations:10,learningRate:.1,gridType:"rect",torus:!0,method:"random"};SOM.load=function loadModel(model,distance){if("SOM"===model.name){var x=model.data.length,y=model.data[0].length;distance?model.options.distance=distance:model.options.distance&&(model.options.distance=eval("("+model.options.distance+")"));var som=new SOM(x,y,model.options,!0);som.nodes=new Array(x);for(var i=0;x>i;i++){som.nodes[i]=new Array(y);for(var j=0;y>j;j++)som.nodes[i][j]=new som.nodeType(i,j,model.data[i][j],som)}return som}throw new Error("expecting a SOM model")},SOM.prototype["export"]=function(t){if(!this.done)throw new Error("model is not ready yet");var r={name:"SOM"};r.options={fields:this.options.fields,gridType:this.options.gridType,torus:this.options.torus},r.data=new Array(this.x);for(var n=0;nr;r++)o[r]=this.extractor(t[r]);this.numIterations=this.iterations*e,this.timeConstant="random"===this.algorithmMethod?this.numIterations/Math.log(this.mapRadius):e/Math.log(this.mapRadius),this.trainingSet=o,this.times.setTraining=Date.now()-n},SOM.prototype.trainOne=function(){if(this.done)return!1;if(this.numIterations-->0){var t,r,n;return"random"===this.algorithmMethod?(t=this.mapRadius*Math.exp(-this.iterationCount/this.timeConstant),r=getRandomValue(this.trainingSet,this.randomizer),this._adjust(r,t),this.learningRate=this.startLearningRate*Math.exp(-this.iterationCount/this.numIterations)):(n=-Math.floor(this.iterationCount/this.trainingSet.length),t=this.mapRadius*Math.exp(n/this.timeConstant),r=this.trainingSet[this.iterationCount%this.trainingSet.length],this._adjust(r,t),(this.iterationCount+1)%this.trainingSet.length===0&&(this.learningRate=this.startLearningRate*Math.exp(n/Math.floor(this.numIterations/this.trainingSet.length)))),this.iterationCount++,!0}return this.done=!0,!1},SOM.prototype._adjust=function(t,r){var n,o,e,i,s=Date.now(),a=this._findBestMatchingUnit(t),h=Date.now();this.times.findBMU+=h-s;var f=Math.floor(r),u=a.x-f,c=a.x+f,l=a.y-f,d=a.y+f;for(n=u;c>=n;n++){var m=n;for(0>n?m+=this.x:n>=this.x&&(m-=this.x),o=l;d>=o;o++){var p=o;0>o?p+=this.y:o>=this.y&&(p-=this.y),e=a[this.distanceMethod](this.nodes[m][p]),r>e&&(i=Math.exp(-e/(2*r)),this.nodes[m][p].adjustWeights(t,this.learningRate,i))}}this.times.adjust+=Date.now()-h},SOM.prototype.train=function(t){if(!this.done)for(this.setTraining(t);this.trainOne(););},SOM.prototype.getConvertedNodes=function(){for(var t=new Array(this.x),r=0;rn&&(o=n,r=this.nodes[e][i]);return r},SOM.prototype.predict=function(t,r){if("boolean"==typeof t&&(r=t,t=null),t||(t=this.trainingSet),Array.isArray(t)&&(Array.isArray(t[0])||"object"==typeof t[0])){var n=this;return t.map(function(t){return n._predict(t,r)})}return this._predict(t,r)},SOM.prototype._predict=function(t,r){Array.isArray(t)||(t=this.extractor(t));var n=this._findBestMatchingUnit(t),o=[n.x,n.y];return r&&(o[2]=n.getPosition(t)),o},SOM.prototype.getQuantizationError=function(){for(var t=this.getFit(),r=t.length,n=0,o=0;r>o;o++)n+=t[o];return n/r},SOM.prototype.getFit=function(t){t||(t=this.trainingSet);for(var r,n=t.length,o=new Array(n),e=0;n>e;e++)r=this._findBestMatchingUnit(t[e]),o[e]=Math.sqrt(this.distance(t[e],r.weights));return o},module.exports=SOM},{"./node-hexagonal":57,"./node-square":58}],57:[function(t,r){function n(t,r,n,e){o.call(this,t,r,n,e),this.hX=t-Math.floor(r/2),this.z=0-this.hX-r}var o=t("./node-square");n.prototype=new o,n.prototype.constructor=n,n.prototype.getDistance=function(t){return Math.max(Math.abs(this.hX-t.hX),Math.abs(this.y-t.y),Math.abs(this.z-t.z))},n.prototype.getDistanceTorus=function(t){var r=Math.abs(this.hX-t.hX),n=Math.abs(this.y-t.y),o=Math.abs(this.z-t.z);return Math.max(Math.min(r,this.som.gridDim.x-r),Math.min(n,this.som.gridDim.y-n),Math.min(o,this.som.gridDim.z-o))},n.prototype.getPosition=function(){throw new Error("Unimplemented : cannot get position of the points for hexagonal grid")},r.exports=n},{"./node-square":58}],58:[function(t,r){function n(t,r,n,o){this.x=t,this.y=r,this.weights=n,this.som=o,this.neighbors={}}n.prototype.adjustWeights=function(t,r,n){for(var o=0,e=this.weights.length;e>o;o++)this.weights[o]+=r*n*(t[o]-this.weights[o])},n.prototype.getDistance=function(t){return Math.max(Math.abs(this.x-t.x),Math.abs(this.y-t.y))},n.prototype.getDistanceTorus=function(t){var r=Math.abs(this.x-t.x),n=Math.abs(this.y-t.y);return Math.max(Math.min(r,this.som.gridDim.x-r),Math.min(n,this.som.gridDim.y-n))},n.prototype.getNeighbors=function(t){if(!this.neighbors[t]){this.neighbors[t]=new Array(2);var r;if(this[t]>0?r=this[t]-1:this.som.torus&&(r=this.som.gridDim[t]-1),"undefined"!=typeof r){var n,o;"x"===t?(n=r,o=this.y):(n=this.x,o=r),this.neighbors[t][0]=this.som.nodes[n][o]}var e;this[t]s?(n=e[0],o=-1):(n=e[1],o=1)}else n=e[0],o=-1;else n=e[1],o=1;var h=1-i(r,this.weights),f=1-i(r,n.weights),u=(h-f)/(2-h-f);return.5+.5*u*o},n.prototype.getPosition=function(t){return[this.getPos("x",t),this.getPos("y",t)]},r.exports=n},{}],59:[function(t,r){"use strict";function n(t){for(var r=-1/0,n=t.length,o=0;n>o;o++)t[o]>r&&(r=t[o]);return r}function o(t){for(var r=1/0,n=t.length,o=0;n>o;o++)t[o]o;o++)r+=t[o];return r/n}function i(t){for(var r=0,n=t.length,o=0;n>o;o++)r*=t[o];return Math.pow(r,1/n)}function s(t){for(var r=0,n=t.length,o=0;n>o;o++)r+=Math.log(t[o]);return r/n}function a(t,r){for(var n=0,o=0,e=t.length,i=0;e>i;i++)n+=r[i]*t[i],o+=r[i];return n/o}function h(t,r,n){"undefined"==typeof n&&(n=!1),t=n?t:t.slice(),t.sort();for(var o=t.length,e=Math.floor(o*r),i=0,s=e;o-e>s;s++)i+=t[s];return i/(o-2*e)}function f(t,r){"undefined"==typeof r&&(r=1);for(var n=0,o=0,e=t.length,i=0;e>i;i++)n+=Math.pow(t[i],r+1),o+=Math.pow(t[i],r);return n/o}function u(t,r){return Math.sqrt(m(t,r))}function c(t){return u(t)/Math.sqrt(t.length)}function l(t,r){"undefined"==typeof r&&(r=!1),r||(t=t.slice(),t.sort());var n=t.length,o=Math.floor(n/2);return n%2===0?.5*(t[o-1]+t[o]):t[o]}function d(t,r){"undefined"==typeof r&&(r=!1),r||(t=t.slice(),t.sort());var n=t.length/4,o=t[Math.ceil(n)-1],e=l(t,!0),i=t[Math.ceil(3*n)-1];return{q1:o,q2:e,q3:i}}function m(t,r){"undefined"==typeof r&&(r=!0);for(var n=e(t),o=0,i=t.length,s=0;i>s;s++){var a=t[s]-n;o+=a*a}return r?o/(i-1):o/i}function p(t,r){return Math.sqrt(v(t,r))}function v(t,r){"undefined"==typeof r&&(r=!0);for(var n=0,o=0,e=t.length,i=0;e>i;i++){var s=t[i],a=m(s);n+=(s.length-1)*a,o+=r?s.length-1:s.length}return n/o}function g(t){var r,n=t.length,o=new Array(n);for(r=0;n>r;r++)o[r]=0;var e=new Array(n),i=0;for(r=0;n>r;r++){var s=e.indexOf(t[r]);s>=0?o[s]++:(e[i]=t[r],o[i]=1,i++)}var a=0,h=0;for(r=0;i>r;r++)o[r]>a&&(a=o[r],h=r);return e[h]}function y(t,r,n){"undefined"==typeof n&&(n=!0);var o=e(t),i=e(r);if(t.length!==r.length)throw"Vectors do not have the same dimensions";for(var s=0,a=t.length,h=0;a>h;h++){var f=t[h]-o,u=r[h]-i;s+=f*u}return n?s/(a-1):s/a}function w(t,r){"undefined"==typeof r&&(r=!0);for(var n=e(t),o=0,i=0,s=t.length,a=0;s>a;a++){var h=t[a]-n;o+=h*h,i+=h*h*h}var f=o/s,u=i/s,c=u/Math.pow(f,1.5);if(r){var l=Math.sqrt(s*(s-1)),d=s-2;return l/d*c}return c}function M(t,r){"undefined"==typeof r&&(r=!0);for(var n=e(t),o=t.length,i=0,s=0,a=0;o>a;a++){var h=t[a]-n;i+=h*h,s+=h*h*h*h}var f=i/o,u=s/o;if(r){var c=i/(o-1),l=o*(o+1)/((o-1)*(o-2)*(o-3)),d=s/(c*c),m=(o-1)*(o-1)/((o-2)*(o-3));return l*d-3*m}return u/(f*f)-3}function x(t,r){"undefined"==typeof r&&(r=0);for(var n=0,o=t.length,e=0;o>e;e++)n+=t[e]*Math.log(t[e]+r);return-n}function b(t,r){for(var n=0,o=t.length,e=0;o>e;e++)n+=t[e]*r[e];return n}function k(t,r){return Math.sqrt(A(t,r))}function A(t,r){for(var n=b(t,r),o=0,e=t.length,i=0,s=0,a=0;e>a;a++){var h=t[a]-n,f=r[a];o+=f*h*h,s+=f,i+=f*f}return o*(s/(s*s-i))}function S(t,r){"undefined"==typeof r&&(r=!1);var n=t;r||(n=t.slice());for(var o=e(n),i=n.length,s=0;i>s;s++)n[s]-=o}function q(t,r,n){"undefined"==typeof r&&(r=u(t)),"undefined"==typeof n&&(n=!1);for(var o=t.length,e=n?t:new Array(o),i=0;o>i;i++)e[i]=t[i]/r;return e}function j(t){var r=t.length,n=new Array(r);n[0]=t[0];for(var o=1;r>o;o++)n[o]=n[o-1]+t[o];return n}r.exports={min:o,max:n,mean:e,geometricMean:i,logGeometricMean:s,grandMean:a,truncatedMean:h,contraHarmonicMean:f,standardDeviation:u,standardError:c,median:l,quartiles:d,variance:m,pooledStandardDeviation:p,pooledVariance:v,mode:g,covariance:y,skewness:w,kurtosis:M,entropy:x,weightedMean:b,weightedStandardDeviation:k,weightedVariance:A,center:S,standardize:q,cumulativeSum:j}},{}],60:[function(t,r){"use strict";function n(t,r){"undefined"==typeof r&&(r=0);for(var n=0,o=t.length,e=t[0].length,i=0;o>i;i++)for(var s=0;e>s;s++)n+=t[i][s]*Math.log(t[i][s]+r);return-n}function o(t,r){"undefined"==typeof r&&(r=0);var n,o,e,i,s=t.length,a=t[0].length;if(-1===r){for(n=[0],o=s*a,e=0;s>e;e++)for(i=0;a>i;i++)n[0]+=t[e][i];n[0]/=o}else if(0===r)for(n=new Array(a),o=s,i=0;a>i;i++){for(n[i]=0,e=0;s>e;e++)n[i]+=t[e][i];n[i]/=o}else{if(1!==r)throw new Error("Invalid dimension");for(n=new Array(s),o=a,i=0;s>i;i++){for(n[i]=0,e=0;a>e;e++)n[i]+=t[i][e];n[i]/=o}}return n}function e(t,r,n){for(var o=i(t,r,n),e=o.length,s=0;e>s;s++)o[s]=Math.sqrt(o[s]);return o}function i(t,r,n){"undefined"==typeof n&&(n=!0),r=r||o(t);var e=t.length;if(0===e)return[];for(var i=t[0].length,s=new Array(i),a=0;i>a;a++){for(var h=0,f=0,u=0,c=0;e>c;c++)u=t[c][a]-r[a],h+=u,f+=u*u;s[a]=n?(f-h*h/e)/(e-1):(f-h*h/e)/e}return s}function s(t){for(var r=t.length,n=t[0].length,o=new Array(n),e=0;n>e;e++){for(var i=new Array(r),s=0;r>s;s++)i[s]=t[s][e];i.sort();var a=i.length;o[e]=a%2===0?.5*(i[a/2]+i[a/2-1]):i[Math.floor(a/2)]}return o}function a(t){var r,n,o=t.length,e=t[0].length,i=new Array(e);for(r=0;e>r;r++){for(var s=new Array(o),a=0;o>a;a++)s[a]=0;var h=new Array(o),f=0;for(n=0;o>n;n++){var u=h.indexOf(t[n][r]);u>=0?s[u]++:(h[f]=t[n][r],s[f]=1,f++)}var c=0,l=0;for(n=0;f>n;n++)s[n]>c&&(c=s[n],l=n);i[r]=h[l]}return i}function h(t,r){"undefined"==typeof r&&(r=!0);for(var n=o(t),e=t.length,i=n.length,s=new Array(i),a=0;i>a;a++){for(var h=0,f=0,u=0;e>u;u++){var c=t[u][a]-n[a];h+=c*c,f+=c*c*c}var l=h/e,d=f/e,m=d/Math.pow(l,1.5);if(r){var p=Math.sqrt(e*(e-1)),v=e-2;s[a]=p/v*m}else s[a]=m}return s}function f(t,r){"undefined"==typeof r&&(r=!0);for(var n=o(t),e=t.length,i=t[0].length,s=new Array(i),a=0;i>a;a++){for(var h=0,f=0,u=0;e>u;u++){var c=t[u][a]-n[a];h+=c*c,f+=c*c*c*c}var l=h/e,d=f/e;if(r){var m=h/(e-1),p=e*(e+1)/((e-1)*(e-2)*(e-3)),v=f/(m*m),g=(e-1)*(e-1)/((e-2)*(e-3));s[a]=p*v-3*g}else s[a]=d/(l*l)-3}return s}function u(t){for(var r=t.length,n=e(t),o=n.length,i=new Array(o),s=Math.sqrt(r),a=0;o>a;a++)i[a]=n[a]/s;return i}function c(t,r){return l(t,void 0,r)}function l(t,r,n){"undefined"==typeof n&&(n=0),"undefined"==typeof r&&(0===n?r=t.length-1:1===n&&(r=t[0].length-1));var e=o(t,n),i=t.length;if(0===i)return[[]];var s,a,h,f,u,c=t[0].length;if(0===n){for(s=new Array(c),a=0;c>a;a++)s[a]=new Array(c);for(a=0;c>a;a++)for(h=a;c>h;h++){for(f=0,u=0;i>u;u++)f+=(t[u][h]-e[h])*(t[u][a]-e[a]);f/=r,s[a][h]=f,s[h][a]=f}}else{if(1!==n)throw new Error("Invalid dimension");for(s=new Array(i),a=0;i>a;a++)s[a]=new Array(i);for(a=0;i>a;a++)for(h=a;i>h;h++){for(f=0,u=0;c>u;u++)f+=(t[h][u]-e[h])*(t[a][u]-e[a]);f/=r,s[a][h]=f,s[h][a]=f}}return s}function d(t){var r,n,i=o(t),s=e(t,!0,i),a=m(t,i,s),h=t.length,f=t[0].length,u=new Array(f);for(r=0;f>r;r++)u[r]=new Array(f);for(r=0;f>r;r++)for(n=r;f>n;n++){for(var c=0,l=0,d=a.length;d>l;l++)c+=a[l][n]*a[l][r];c/=h-1,u[r][n]=c,u[n][r]=c}return u}function m(t,r,n){return r=r||o(t),"undefined"==typeof n&&(n=e(t,!0,r)),v(p(t,r,!1),n,!0)}function p(t,r,n){r=r||o(t);var e,i,s,a=t,h=t.length;if(!n)for(a=new Array(h),e=0;h>e;e++)a[e]=new Array(t[e].length);for(e=0;h>e;e++){var f=a[e];for(i=0,s=f.length;s>i;i++)f[i]=t[e][i]-r[i]}return a}function v(t,r,n){"undefined"==typeof r&&(r=e(t));var o,i,s,a=t,h=t.length;if(!n)for(a=new Array(h),o=0;h>o;o++)a[o]=new Array(t[o].length);for(o=0;h>o;o++){var f=a[o],u=t[o];for(i=0,s=f.length;s>i;i++)0===r[i]||isNaN(r[i])||(f[i]=u[i]/r[i])}return a}function g(t,r){var n=o(t),e=t.length;if(0===e)return[];for(var i=t[0].length,s=new Array(i),a=0;i>a;a++){for(var h=0,f=0,u=0,c=0;e>c;c++){var l=t[c][a]-n[a],d=r[c];h+=d*l*l,u+=d,f+=d*d}s[a]=h*(u/(u*u-f))}return s}function y(t,r,n){"undefined"==typeof n&&(n=0);var o=t.length;if(0===o)return[];var e,i,s,a,h,f,u=t[0].length;if(0===n){for(e=new Array(u),i=0;u>i;i++)e[i]=0;for(i=0;o>i;i++)for(f=t[i],h=r[i],a=0;u>a;a++)e[a]+=f[a]*h}else{if(1!==n)throw new Error("Invalid dimension");for(e=new Array(o),i=0;o>i;i++)e[i]=0;for(a=0;o>a;a++)for(f=t[a],h=r[a],i=0;u>i;i++)e[a]+=f[i]*h}var c=x(r);if(0!==c)for(i=0,s=e.length;s>i;i++)e[i]/=c;return e}function w(t,r,n,o){o=o||0,n=n||y(t,r,o);for(var e=0,i=0,s=0,a=r.length;a>s;s++)e+=r[s],i+=r[s]*r[s];var h=e/(e*e-i);return M(t,r,n,h,o)}function M(t,r,n,o,e){e=e||0,n=n||y(t,r,e),"undefined"==typeof o&&(o=1);var i=t.length;if(0===i)return[[]];var s,a,h,f,u,c=t[0].length;if(0===e){for(s=new Array(c),a=0;c>a;a++)s[a]=new Array(c);for(a=0;c>a;a++)for(h=a;c>h;h++){for(u=0,f=0;i>f;f++)u+=r[f]*(t[f][h]-n[h])*(t[f][a]-n[a]);s[a][h]=u*o,s[h][a]=u*o}}else{if(1!==e)throw new Error("Invalid dimension");for(s=new Array(i),a=0;i>a;a++)s[a]=new Array(i);for(a=0;i>a;a++)for(h=a;i>h;h++){for(u=0,f=0;c>f;f++)u+=r[f]*(t[h][f]-n[h])*(t[a][f]-n[a]);s[a][h]=u*o,s[h][a]=u*o}}return s}function x(t){for(var r=0,n=t.length,o=0;n>o;o++)r+=t[o];return r}r.exports={entropy:n,mean:o,standardDeviation:e,variance:i,median:s,mode:a,skewness:h,kurtosis:f,standardError:u,covariance:c,scatter:l,correlation:d,zScores:m,center:p,standardize:v,weightedVariance:g,weightedMean:y,weightedCovariance:w,weightedScatter:M}},{}]},{},[1])(1)}); \ No newline at end of file diff --git a/package.json b/package.json index 0c8f309..c0de8ff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ml", - "version": "0.1.4", + "version": "0.2.0", "description": "Machine learning tools", "main": "index.js", "scripts": {