MatrixOps
MatrixOps is an npm package that makes performing matrix operations on 2 dimensional JavaScript arrays simple. It also provides some convenience methods similar to what might be found in a statistical language like MATLAB or Octave.
Usage
To install matrixops, simply run:
npm install matrixops
#add
Accepts 2-dimensional arrays, 1-dimensional arrays, and numbers, and adds them together, returning a new array.
const MatrixOps = require('matrixops'); MatrixOps.add([[1, 2], [3, 4]], 5); // => [[6, 7], [8, 9]] MatrixOps.add([[1, 2], [3, 4]], [[1, 2], [3, 4]]); // => [[2, 4], [6, 8]]
#subtract
Accepts 2-dimensional arrays, 1-dimensional arrays, and numbers, and subtracts the second argument from the first, returning a new array.
MatrixOps.subtract([[1, 2], [3, 4]], [[1, 2], [3, 4]]); // => [[0, 0], [0, 0]] MatrixOps.subtract([3, 4], [1, 2]); // => [2, 2]
#multiply
Accepts 2-dimensional arrays, 1-dimensional arrays, and numbers, and multiplies them together, returning a new array.
MatrixOps.multiply([[1, 2, 3], [4, 5, 6]], [[1,2],[3,4],[5,6]]); // => [[22, 28], [49, 64]] MatrixOps.multiply([[1, 2, 3], [4, 5, 6]], [[1],[2],[3]]); // => [[14], [32]] MatrixOps.multiply([[1,2],[3,4]], 2); // => [[2, 4], [6, 8]]
#transpose
Accepts a 2-dimensional or 1-dimensional array and returns its transpose.
MatrixOps.transpose([1, 2, 3]); // => [[1], [2], [3]] MatrixOps.transpose([[[1, 2], [3, 4], [5, 6]]); // => [[1, 3, 5], [2, 4, 6]]
#elementTransform
Accepts a 1 or 2-dimensional array and a callback function, and applies the callback to every element of the array. The callback function accepts up to 3 arguments: the element, the row index, and the column index.
MatrixOps.elementTransform([[1, 2], [3, 4]], el => el * 2); // => [[2, 4], [6, 8]] MatrixOps.elementTransform([[1, 2], [3, 4]], el => Math.pow(el, 2)); // => [[1, 4], [9, 16]] MatrixOps.elementTransform([[1, 2], [3, 4]], (el, row, col) => { return el * 2 + col + row; }); // => [[2, 5], [7, 10]]
#elByElCalc
Accepts 2 arrays with the same dimensions and a callback, and applies the callback to pairs of elements at the same indices in the two arrays. The callback function accepts up to 4 arguments: the matrix 1 element at the position, the matrix 2 element at the position, the row index, and the column index.
MatrixOps.elByElCalc([[1, 2], [3, 4]], [[1, 2], [3, 4]], (el1, el2) => el1 * el2); // => [[1, 4], [9, 16]] MatrixOps.elByElCalc([1, 2, 3], [1, 2, 3], (el1, el2) => el1 * el2); // => [[1, 4, 9] MatrixOps.elByElCalc([[1, 2], [3, 4]], [[1, 2], [3, 4]], (el1, el2, row, col) => { return el1 * el2 + row + col; }); // => [[1, 5], [10, 18]]
#zeroes
Accepts 1 or 2 numbers and returns an array of zeroes with the specified dimensions. The second dimension defaults to 1 if no second number is given.
MatrixOps.zeroes(2, 3); // => [[0, 0, 0], [0, 0, 0]] MatrixOps.zeroes(2)); // => [[0], [0]]
#ones
Accepts 1 or 2 numbers and returns an array of ones with the specified dimensions. The second dimension defaults to 1 if no second number is given.
MatrixOps.ones(2, 3); // => [[1,1,1], [1,1,1]] MatrixOps.ones(2)); // => [[1], [1]]
#identity
Accepts a number n and returns an n x n identity matrix
MatrixOps.identity(3); // => [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
#equals
Accepts two matrices or vectors, and returns true if all elements at the same position are equal
const a = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] const b = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] MatrixOps.equals(a, b) // => true const c = [1, 2, 3] const d = [1, 2, 4] MatrixOps.equals(c, d) // => false
rowMeans
Accepts a matrix and returns the mean of each row as an array.
const a = [ [1, 2, 3], [1, 2, 3], [1, 2, 3] ] MatrixOps.rowMeans(a); // => [ 2, 2, 2 ]
colMeans
Accepts a matrix and returns the mean of each column as an array.
const a = [ [1, 2, 3], [1, 2, 3], [1, 2, 3], ] MatrixOps.colMeans(a); // => [1, 2, 3]
rowStdDevs
Accepts a matrix and returns the standard deviation of each row as an array.
const a = [ [1, 5], [9, 13] ] MatrixOps.rowStdDevs(a); // => [2, 2]
colStdDevs
Accepts a matrix and returns the standard deviation of each column as an array.
const a = [ [1, 9], [7, 15]] MatrixOps.colStdDevs(a); // => [3, 3]