Skip to content

Instantly share code, notes, and snippets.

@justinoboyle
Created May 27, 2016 22:28
Show Gist options
  • Save justinoboyle/c8c9f30557a09ebe7fceb0f40da7e697 to your computer and use it in GitHub Desktop.
Save justinoboyle/c8c9f30557a09ebe7fceb0f40da7e697 to your computer and use it in GitHub Desktop.
const fs = require('fs');
const regression = require('regression');
function createNDimArray(dimensions) {
var t, i = 0, s = dimensions[0], arr = new Array(s);
if ( dimensions.length < 3 ) for ( t = dimensions[1] ; i < s ; ) arr[i++] = new Array(t);
else for ( t = dimensions.slice(1) ; i < s ; ) arr[i++] = createNDimArray(t);
return arr;
}
function graph(input) {
for(var x = 0; x < input.length; x++) {
console.log(JSON.stringify(input[x]));
}
}
function fill(input, fillWith) {
for(var x = 0; x < input.length; x++) {
for(var y = 0; y < input[x].length; y++) {
input[x][y] = fillWith;
}
}
return input;
}
function fuzz(number, amount) {
return getRandom(number-amount, number+amount);
}
function fuzzInt(number, amount) {
return Math.floor(fuzz(number, amount));
}
function linearGenerate(input, m, b, fuzz) {
var len = input.length;
for(var x = 0; x < len; x++)
input[x][fuzzInt((m * x) + b, fuzz)] = 1;
return input;
}
function getRandom(min, max) {
return Math.random() * (max - min) + min;
}
function flipMatrixValues(input) {
for(var x = 0; x < input.length; x++) {
input[x] = input[x].reverse();
}
return input;
}
function toCSV(input) {
var points = [];
points.push('x,y');
for(var x = 0; x < input.length; x++) {
for(var y = 0; y < input[x].length; y++) {
if(input[x][y] == 1)
points.push( x + "," + y );
}
}
return points.join('\n');
}
function fixForRegression(input) {
var points = [];
for(var x = 0; x < input.length; x++) {
for(var y = 0; y < input[x].length; y++) {
if(input[x][y] == 1)
points.push([x, y]);
}
}
return points;
}
function generate(m, b, fuzz) {
var data = createNDimArray([20, 20]);
data = fill(data, 0);
data = linearGenerate(data, m, b, fuzz);
return data;
}
var data = generate(1, 0, 0.8);
var temp = toCSV(data);
var result = regression('linear', fixForRegression(data));
var newData = generate(result.equation[0], result.equation[1], 0);
temp += toCSV(newData);
fs.writeFile('test.csv', temp, function(a,b) {})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment