function random() { let seed = 12345; // fixed seed return function() { seed = ( seed * 16807 ) % 2147483647; return ( seed - 1 ) / 2147483646; }; } const randomFix = random(); export default class Vector { constructor( length, fillValue = 0 ) { this.data = new Array( length ); for ( let i = 0 ; i < length ; i++ ) { this.data[ i ] = fillValue; } } get length() { return this.data.length; } static dot( a, b ) { let sum = 0; for ( let i = 0 ; i < a.length ; i++ ) { sum += a.data[ i ] * b.data[ i ]; } return sum; } static softmax( vec ) { const max = Math.max( ...vec.data ); const exps = new Array( vec.length ); let sum = 0; for ( let i = 0 ; i < vec.length ; i++ ) { exps[ i ] = Math.exp( vec.data[ i ] - max ); sum += exps[ i ]; } const result = new Vector( vec.length ); for ( let i = 0 ; i < vec.length ; i++ ) { result.data[ i ] = exps[ i ] / sum; } return result; } }