From fd5178ac6991c57ac0f0cb9faa99e97da89821bf Mon Sep 17 00:00:00 2001 From: Jadrian Miles Date: Thu, 18 Feb 2016 08:58:40 -0500 Subject: [PATCH 1/2] Fixed transpose() to support non-square matrices. --- Common/MV.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Common/MV.js b/Common/MV.js index 90c2571..5cf33f5 100644 --- a/Common/MV.js +++ b/Common/MV.js @@ -505,11 +505,11 @@ function transpose( m ) if ( !m.matrix ) { return "transpose(): trying to transpose a non-matrix"; } - + var result = []; - for ( var i = 0; i < m.length; ++i ) { + for ( var i = 0; i < m[0].length; ++i ) { result.push( [] ); - for ( var j = 0; j < m[i].length; ++j ) { + for ( var j = 0; j < m.length; ++j ) { result[i].push( m[j][i] ); } } From 2c474b1e4371e3293c733edc0d7e40c372ddedc2 Mon Sep 17 00:00:00 2001 From: Jadrian Miles Date: Thu, 18 Feb 2016 09:53:31 -0500 Subject: [PATCH 2/2] Fixed mult() to support non-square matrices. --- Common/MV.js | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/Common/MV.js b/Common/MV.js index 5cf33f5..a05e5b0 100644 --- a/Common/MV.js +++ b/Common/MV.js @@ -277,22 +277,23 @@ function mult( u, v ) var result = []; if ( u.matrix && v.matrix ) { - if ( u.length != v.length ) { - throw "mult(): trying to add matrices of different dimensions"; - } - - for ( var i = 0; i < u.length; ++i ) { - if ( u[i].length != v[i].length ) { - throw "mult(): trying to add matrices of different dimensions"; + var M = u.length; + var N = v.length; + var P = v[0].length; + + // Check that inner dimensions match. + for ( var i = 0; i < M; ++i ) { + if ( u[i].length != N ) { + throw "mult(): dimension mismatch"; } } - for ( var i = 0; i < u.length; ++i ) { + for ( var i = 0; i < M; ++i ) { result.push( [] ); - for ( var j = 0; j < v.length; ++j ) { + for ( var j = 0; j < P; ++j ) { var sum = 0.0; - for ( var k = 0; k < u.length; ++k ) { + for ( var k = 0; k < N; ++k ) { sum += u[i][k] * v[k][j]; } result[i].push( sum );