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

    tensor-contraction

    0.2.0 • Public • Published

    tensor-contraction

    implements tensor contraction on a single mixed tensor

    Install

    With npm do

    npm install tensor-contraction --save
    

    Usage

    Signature is (addition, indicesPair, tensorDim, tensorData) where

    • addition is a function that defines the scalar operator used
    • indicesPair is an array of two elements that indicates which indices will be used for contraction
    • tensorDim is an array that defines tensor indices set
    • tensorData is an array that defines the tensor components

    It returns the contractedTensorData array given by the tensors contraction.

    It throws a TypeError: Contraction indices does not have the same dimension. See indices pair check example.

    Examples

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

    Let's use common real addition.

    var tensorContraction = require('tensor-contraction')
    
    function addition (a, b) { return a + b }
    
    var contraction = tensorContraction.bind(null, addition)
    

    Matrix trace

    The trace of a matrix is the sum of the components in its diagonal. It is the simplest example of tensor contraction. In the following example, the trace is 1 + 5 + 9 = 15

    contraction([0, 1], [3, 3], [1, 2, 3,
                                 4, 5, 6,
                                 7, 8, 9]).should.be.eql(15)
    

    Indices pair check

    It is required that indices chosen for contraction have the same dimension. The following example

    contraction([0, 1], [3, 2], [1, 2, 3,
                                 4, 5, 6])
    

    will throw with message

    Contraction indices does not have the same dimension: 0-th index = 3 but 1-th index = 2.

    Order 3

    Consider a tensor of order 3 and contract pairing first and last index. A multidimensional array t is used to point out which component corresponds to a given combination of indices, but keep in mind that tensors are always given as a monodimensional array. Note that contracted tensor is a vector with two elements, where:

    1. the first one is given by the sum of the tensor components with middle index equal to 0 and with first and last index equals;
    2. the second one is given by the sum of tensor components with middle index equal to 1 and with first and last index equals.
    var t = [[[0, 1], [2, 3]], [[4, 5], [6, 7]]] // t[0][0][0] = 0
                                                 // t[0][0][1] = 1
                                                 // t[0][1][0] = 2
                                                 // t[0][1][1] = 3
                                                 // t[1][0][0] = 4
                                                 // t[1][0][1] = 5
                                                 // t[1][1][0] = 6
                                                 // t[1][1][1] = 7
    
    contraction([0, 2], [2, 2, 2], [t[0][0][0], t[0][0][1], t[0][1][0], t[0][1][1],  // [5, 9] = [0 + 5, 2 + 7] =
                                    t[1][0][0], t[1][0][1], t[1][1][0], t[1][1][1]]) //        = [t[0][0][0] + t[1][0][1],
                                                                                     //           t[0][1][0] + t[1][1][1]]
    

    Follows calculation of other 2 possible contractions, where the tensorData is given by explicit numeric values.

    contraction([0, 1], [2, 2, 2], [0, 1, 2, 3, 4, 5, 6, 7]) // [6, 8]
    
    contraction([1, 2], [2, 2, 2], [0, 1, 2, 3, 4, 5, 6, 7]) // [3, 11]
    

    License

    MIT

    Keywords

    Install

    npm i tensor-contraction

    DownloadsWeekly Downloads

    3

    Version

    0.2.0

    License

    MIT

    Unpacked Size

    9.94 kB

    Total Files

    6

    Last publish

    Collaborators

    • avatar