UNPKG

greataptic

Version:

A simplistic neural network library.

117 lines (86 loc) 2.77 kB
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