Negatively Proportional Model
    Have ideas to improve npm?Join in the discussion! »

    matrix-multiplication

    0.5.2 • Public • Published

    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

    Keywords

    Install

    npm i matrix-multiplication

    DownloadsWeekly Downloads

    102

    Version

    0.5.2

    License

    MIT

    Last publish

    Collaborators

    • avatar