greataptic
Version:
A simplistic neural network library.
117 lines (86 loc) • 2.77 kB
JavaScript
function _logit(x) {
return Math.log(x / (1 - x));
}
let Vector = module.exports.Vector = class Vector {
constructor(data) {
if (data.data != null) data = data.data;
this.data = Array.from(data);
this.dims = this.data.length;
}
co(coord) {
return this.data[coord] != null ? this.data[coord] : null;
}
size() {
return Math.sqrt(this.data.reduce((a, b) => a + Math.pow(b, 2), 0));
}
sum() {
return this.data.reduce((a, b) => a + b, 0);
}
add(_b) {
let b = _b.dims != null ? _b : new Vector(_b);
let res = [];
for (let i = 0; i < Math.min(this.dims, b.dims); i++) res[i] = this.data[i] + b.data[i];
return new Vector(res);
}
pow(pow) {
return new Vector(this.data.map(x => Math.pow(x, pow)));
}
sub(_b) {
let b = _b.dims != null ? _b : new Vector(_b);
let res = [];
for (let i = 0; i < Math.min(this.dims, b.dims); i++) res[i] = this.data[i] - b.data[i];
return new Vector(res);
}
multiplyVec(_b) {
let b = _b.dims != null ? _b : new Vector(_b);
let res = [];
for (let i = 0; i < Math.min(this.dims, b.dims); i++) res[i] = this.data[i] * b.data[i];
return new Vector(res);
}
divideVec(_b) {
let b = _b.dims != null ? _b : new Vector(_b);
let res = [];
for (let i = 0; i < Math.min(this.dims, b.dims); i++) res[i] = this.data[i] / b.data[i];
return new Vector(res);
}
multiplyFac(b) {
return new Vector(this.data.map(a => a * b));
}
divideFac(b) {
return new Vector(this.data.map(a => a / b));
}
combiner(combinerFunc) {
return function (b) {
if (!b.dims) b = new Vector(b);
return new Vector(this.data.map((x, i) => combinerFunc(x, b.data[i])));
};
}
map(func) {
return new Vector(this.data.map(func));
}
dot(b) {
if (this.data.length === 0 || b.dims === 0) return 0;
let res = 0;
for (let i = 0; i < Math.min(this.dims, b.dims); i++) res += this.data[i] * b.data[i];
return res;
}
static is(vec) {
return !!(vec && vec.data && vec.dims && vec.size && vec.combiner && vec.map);
}
static fill(opts) {
if (opts.map != null) return new Vector(new Array(opts.length).fill(0).map((_, i, a) => opts.map(i, a)));else return new Vector(new Array(opts.length).fill(opts.value != null ? opts.value : 0));
}
static random(dims) {
return new Vector(new Array(dims).fill(0).map(() => _logit(0.25 + 0.5 * Math.random())));
}
static randomOne() {
return _logit(0.25 + 0.5 * Math.random());
}
static randomSize(dims, size) {
return new Vector(new Array(dims).fill(0).map(() => (Math.random() * 2 - 1) * size));
}
static zero(dims) {
return new Vector(new Array(dims).fill(0));
}
};
//# sourceMappingURL=vector.js.map