49 lines
1.0 KiB
JavaScript
49 lines
1.0 KiB
JavaScript
|
|
import Vector from "./Vector.js"
|
|
|
|
function random() {
|
|
let seed = 12345; // fixed seed
|
|
|
|
return function() {
|
|
seed = ( seed * 16807 ) % 2147483647;
|
|
return ( seed - 1 ) / 2147483646;
|
|
};
|
|
}
|
|
|
|
const randomFix = random();
|
|
|
|
export default class Matrix {
|
|
constructor( rows, cols, fillValue = 0 ) {
|
|
this.rows = rows;
|
|
this.cols = cols;
|
|
this.data = new Array( rows );
|
|
for ( let i = 0 ; i < rows ; i++ ) {
|
|
this.data[ i ] = new Array( cols );
|
|
for ( let j = 0 ; j < cols ; j++ ) {
|
|
this.data[ i ][ j ] = fillValue;
|
|
}
|
|
}
|
|
}
|
|
|
|
static random( rows, cols, scale = 0.1 ) {
|
|
const mat = new Matrix( rows, cols );
|
|
for ( let i = 0 ; i < rows ; i++ ) {
|
|
for ( let j = 0 ; j < cols ; j++ ) {
|
|
mat.data[ i ][ j ] = ( randomFix() - 0.5 ) * scale;
|
|
}
|
|
}
|
|
return mat;
|
|
}
|
|
|
|
static matVecMul( mat, vec ) {
|
|
const result = new Vector( mat.rows );
|
|
for ( let i = 0 ; i < mat.rows ; i++ ) {
|
|
let sum = 0;
|
|
for ( let j = 0 ; j < mat.cols ; j++ ) {
|
|
sum += mat.data[ i ][ j ] * vec.data[ j ];
|
|
}
|
|
result.data[ i ] = sum;
|
|
}
|
|
return result;
|
|
}
|
|
} |