-
Notifications
You must be signed in to change notification settings - Fork 3
/
tensor-product.js
37 lines (30 loc) · 905 Bytes
/
tensor-product.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
var indicesPermutations = require('indices-permutations')
var multiDimArrayIndex = require('multidim-array-index')
/**
* Computes product of tensors
*
*
* @param {Function} multiplication
* @param {Array} leftDim
* @param {Array} rightDim
* @param {Array} rightData
* @param {Array} leftData
*
* @returns {Array} tensorData
*/
function tensorProduct (multiplication, leftDim, rightDim, leftData, rightData) {
var tensorData = []
leftDim
.reduce(indicesPermutations, [])
.forEach(function (leftCombination) {
var i = multiDimArrayIndex(leftDim, leftCombination)
rightDim
.reduce(indicesPermutations, [])
.forEach(function (rightCombination) {
var j = multiDimArrayIndex(rightDim, rightCombination)
tensorData.push(multiplication(leftData[i], rightData[j]))
})
})
return tensorData
}
module.exports = tensorProduct