function multiplication(){ return u.slice(arguments).reduce(function(A, B, index){ if ( ! Array.isArray(A[0]) ) A = [A] if ( ! Array.isArray(B[0]) ) B = u.partition(B, 1) var height = A.length-1 , width = (B = transpose(B)).length-1 , result = u.span(0, height).map(function(i){ return u.span(0, width).map(function(j){ return m.dot(A[i],B[j]) }) }) ; if ( result[0].length == 1) result = Array.prototype.concat.apply([],result) if ( result.length == 1 ) result = result[0] return result }) }
function subtraction(){ return u.slice(arguments).reduce(function(p, c, i){ return u.zipWith(m.sub, p, c) }) }
function addition(){ return u.slice(arguments).reduce(function(p, c, i){ return u.zipWith(m.add, p, c) }) }