matrix-multiplication
implements row by column multiplication
Last updated 3 years ago by fibo .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install matrix-multiplication 
SYNC missed versions from official npm registry.

matrix-multiplication

implements row by column multiplication

Installation | API | Examples | License

NPM version Build Status Dependency Status JavaScript Style Guide

Installation

With npm do

npm install matrix-multiplication

API

Optional custom operators are supported.

var operator = matrixMultiplication([customOperator])

  • @param {Object} [customOperator]
  • @param {Function} [customOperator.addition] defaults to common +
  • @param {Function} [customOperator.multiplication] defaults to common *
  • @returns {Function} operator

var mul = operator(middle, leftMatrix, rightMatrix)

The only requirement needed to multiply row by column an a x b matrix by an c x d matrix is that b = c, i.e. the middle indexes are equal. Actually two compatible matrices are n x m and m x l, let's call m the middle.

  • @param {Number} middle
  • @returns {Function} mul

var matrix = mul(leftMatrix, rightMatrix)

Finally we have the matrix multiplication function. Remember that is not a commutative operator.

  • @param {Array} leftMatrix
  • @param {Array} rightMatrix
  • @returns {Array} matrix

matrixMultiplication.error

An object exposing the following error messages:

Examples

All code in the examples below is intended to be contained into a single file.

Square matrices 2x2

var matrixMultiplication = require('matrix-multiplication')

var mul = matrixMultiplication()(2)

var leftMatrix = [2, 3,
                  1, 1]

var rightMatrix = [0, 1,
                  -1, 0]

mul(leftMatrix, rightMatrix) // [-3, 2,
                             //  -1, 1]

Actually, any pair of matrices with middle = 2 can be multiplied with the same mul function, try with a 3x2 by 2x4

var matrix3x2 = [2, 3,
                 1, 1,
                 1, 1]

var matrix2x4 = [0, 1, 1, 1,
                -1, 0, 2, 3]

mul(matrix3x2, matrix2x4) // [-3, 2, 8, 11,
                          //  -1, 1, 3, 4,
                          //  -1, 1, 3, 4])

Matrices are checked for compatibility, for instances the following snippets will throw.

leftMatrixNotCompatible

Since mul was defined as a multiplication with middle index 2, left matrix is not compatible cause it has 3 columns.

mul([1, 2, 3,
     4, 5, 6,
     7, 8, 9], [1, 2,
                3, 4])

rightMatrixNotCompatible

Since mul was defined as a multiplication with middle index 2, right matrix is not compatible cause it has 3 rows.

mul([1, 2,
     3, 4], [1, 2, 3,
             4, 5, 6,
             7, 8, 9])

You can also multiply over a custom field, just provide a customOperator object with an addition and a multiplication function. The following example shows multiplication of two square matrices of booleans.

Matrices of strings are left as an excercise to the reader.

function booleanAdd (a, b) { return a || b }
function booleanMul (a, b) { return a && b }

var customOperators = {
  addition: booleanAdd,
  multiplication: booleanMul
}

var mulB = matrixMultiplication(customOperators)(3)

var y = true
var n = false

var matrix = [n, y, n,
              y, n, y,
              n, y, n]

var identity = [y, n, n
                n, y, n,
                n, n, y]

mulB(matrix, identity) // [n, y, n,
                       //  y, n, y,
                       //  n, y, n]

License

MIT

Current Tags

  • 0.5.2                                ...           latest (3 years ago)

7 Versions

  • 0.5.2                                ...           3 years ago
  • 0.5.1                                ...           3 years ago
  • 0.5.0                                ...           4 years ago
  • 0.4.0                                ...           5 years ago
  • 0.3.0                                ...           5 years ago
  • 0.2.0                                ...           5 years ago
  • 0.1.0                                ...           5 years ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 2
Last Day 0
Last Week 1
Last Month 4
Dependencies (2)
Dev Dependencies (3)
Dependents (1)

Copyright 2014 - 2017 © taobao.org |