2016-08-17 9 views
1

私はjavascriptを初めて使っていますが、問題があります。私は私の数学的なプログラミングのためのOPLを使用して私の実行ブロックで私はJavaScriptを使用することができます。行列の値を取得

私が3Dマトリックスがあります。今私は、行列Bが1である私のA行列の値を合計したい

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[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]], ]; 

と、このような第二のブール行列を。ここでは、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 
} 

あなたは私を助けてくださいもらえますか?私は

種類が

トンについて...それを策定する方法を知りません。

答えて

0

アレイaArray#forEachで繰り返して、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);

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]; 
} 

} 

} 
} 
関連する問題