Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Perf matrix #6

Merged
merged 11 commits into from
Aug 1, 2017
3 changes: 1 addition & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
language: node_js
node_js:
- node
- 8
- lts/boron #v6
- lts/argon #v4
sudo: false
23 changes: 20 additions & 3 deletions Benchmark/featureBag.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
'use strict';

var Suite = require('benchmark').Suite;
var Matrix = require('ml-matrix');
var Matrix = require('ml-matrix').Matrix;
var Random = require('random-js');

var data = Matrix.rand(100, 120);
Expand All @@ -22,6 +20,10 @@ suite
for(var i = 0; i < data.column; ++i) {
fbv3(data, i);
}
}).add("Transpose view", function () {
for(var i = 0; i < data.column; ++i) {
fbv4(data, i);
}
})
.on('cycle', function (event) {
console.log(String(event.target));
Expand Down Expand Up @@ -69,3 +71,18 @@ function fbv3(X, n) {

return toRet;
}

function fbv4(X, n) {
var distribution = Random.integer(0, X.column);
var engine = Random.engines.mt19937().autoSeed();

var Xt = X.transposeView();

var toRet = new Array(n);

for(var i = 0; i < n; ++i) {
toRet[i] = Xt[distribution(engine)];
}

return new Matrix(toRet).transposeView();
}
41 changes: 41 additions & 0 deletions Benchmark/predictTranspose.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@

var Suite = require('benchmark').Suite;
var Matrix = require('ml-matrix').Matrix;

var testSize = 120;

var data = Matrix.rand(1000, testSize);

var suite = new Suite();

ptv1(data);

suite
.add('tranpose', function () {
ptv1(data);
})
.add('transpose view', function () {
ptv2(data);
}).on('cycle', function (event) {
console.log(String(event.target));
}).run();

function ptv1(X) {
var newData = X.transpose();
var predictions = new Array(newData.length);
for (var i = 0; i < newData.length; ++i) {
predictions[i] = newData[i];
}

return predictions;
}

function ptv2(X) {
var newData = X.transposeView();
var predictions = new Array(newData.length);
for (var i = 0; i < newData.length; ++i) {
predictions[i] = newData.getColumn(i);
}

return predictions;
}
49 changes: 49 additions & 0 deletions Benchmark/retreiveFeatures.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
var Suite = require('benchmark').Suite;
var Matrix = require('ml-matrix').Matrix;
var Random = require('random-js');

var testSize = 120;

var data = Matrix.rand(100, testSize);
var indexes = new Array(testSize);

for(var i = 0; i < testSize; ++i) {
indexes[i] = i;
}

var suite = new Suite();

suite
.add('get and set column', function () {
rfv1(data, indexes);
})
.add('Get column', function () {
rfv2(data, indexes);
})
.add('use matrix get column', function () {
rfv3(data, indexes);
})
.on('cycle', function (event) {
console.log(String(event.target));
}).run();

function rfv1(X, indexes) {
var toRet = new Matrix(X.rows, indexes.length);
for (var i = 0; i < indexes.length; ++i) {
toRet.setColumn(i, X.getColumn(indexes[i]));
}

return toRet;
}

function rfv2(X, indexes) {
var toRet = new Matrix(indexes.length, X.rows);
for(var i = 0; i < indexes.length; ++i) {
toRet[i] = X.getColumn(indexes[i]);
}
return toRet.transposeView();
}

function rfv3(X, indexes) {
return X.columnSelectionView(indexes);
}
Loading