48 lines
952 B
JavaScript
48 lines
952 B
JavaScript
|
|
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;
|
||
|
|
}
|
||
|
|
}
|