得到矩阵的值

时间:2016-08-17 08:11:52

标签: javascript matrix sum

我是javascript的新手并且有问题。我正在使用OPL进行数学编程,在我的执行块中我可以使用javascript。

我有一个3D矩阵:

A[tier][row][column]=
[[[ 1 7 13 19 25 ] 
[ 3 9 15 21 27 ]
[ 5 11 17 23 29 ]
[ 7 13 19 25 31 ]],

[[2 8 14 20 26] 
[4 10 16 22 28]
[6 12 18 24 30]
[8 14 20 26 32]], ];

和第二个布尔矩阵如下:

B[t][r][c] = 
[[[ 1 0 0 0 0 ]
[ 0 0 0 0 0 ]
[ 0 1 0 0 0 ]
[ 0 0 0 0 0 ]]

[0 0 1 0 0] 
[0 1 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]], ];

现在我想总结一下A矩阵的值,其中矩阵B是1。这里就像:1 + 11 + 14 + 10(只是为了弄清楚我的问题是什么)。

我的想法是:

for (var t in Tier)
for (var r in Row)
for (var c in Column) {
val = 0;

if ( B[t][r][c] == 1 ) 
//get the value of A[t][r][c] and add it to val and give the sum of val out
}
你能帮帮我吗?我不知道如何制定它..

亲切的问候

吨。

2 个答案:

答案 0 :(得分:0)

您可以使用Array#forEach迭代数组a并测试b是否包含用于求和的真值。

var a = [[[1, 7, 13, 19, 25], [3, 9, 15, 21, 27], [5, 11, 17, 23, 29], [7, 13, 19, 25, 31]], [[2, 8, 14, 20, 26], [4, 10, 16, 22, 28], [6, 12, 18, 24, 30], [8, 14, 20, 26, 32]]],
    b = [[[1, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 0, 0, 0]], [[0, 0, 1, 0, 0], [0, 1, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]],
    sum = 0;

a.forEach(function (t, i) {
    t.forEach(function (r, j) {
        r.forEach(function (c, k) {
            sum += b[i][j][k] ? c : 0;
        });
    });
});

console.log(sum);

ES6与Array#reduce

var a = [[[1, 7, 13, 19, 25], [3, 9, 15, 21, 27], [5, 11, 17, 23, 29], [7, 13, 19, 25, 31]], [[2, 8, 14, 20, 26], [4, 10, 16, 22, 28], [6, 12, 18, 24, 30], [8, 14, 20, 26, 32]]],
    b = [[[1, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 0, 0, 0]], [[0, 0, 1, 0, 0], [0, 1, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]],
    sum = a.reduce((s, t, i) => 
              s + t.reduce((s, r, j) => 
                  s + r.reduce((s, c, k) => s + b[i][j][k] * c, 0), 0), 0);

console.log(sum);

答案 1 :(得分:0)

您也可以使用简单的for循环:

var A = [[[ 1 7 13 19 25 ] 
[ 3 9 15 21 27 ]
[ 5 11 17 23 29 ]
[ 7 13 19 25 31 ]],

[[2 8 14 20 26] 
[4 10 16 22 28]
[6 12 18 24 30]
[8 14 20 26 32]], ],
    B = [[[ 1 0 0 0 0 ]
[ 0 0 0 0 0 ]
[ 0 1 0 0 0 ]
[ 0 0 0 0 0 ]]

[0 0 1 0 0] 
[0 1 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]], ],
    maxTier=A.length,
    maxRow = A[0].length,
    maxColumn = A[0][0].length,
    val = 0;

for(var t=0;t<maxTier;t++){
for(var r=0;r<maxRow;r++){
for(var c=0;c<maxColumn;c++){
if ( B[t][r][c] == 1 ) 
 val+=A[t][r][c];
}

}

}
}