2017-02-01 3 views
1

を使用して多次元配列Iは焦がすと多次元配列に対してこの操作を実行するために、私は私自身のSUMPRODUCT関数を作成した私は、しばらく前に書いたいくつかの作業コードを、持っている:SUMPRODUCT mathJS

function sumProduct1D(m1, m2) { 
    var result = 0; 
    var len = m1.length; 
    for (var i = 0; i < len; i++) { 
     result += m1[i] * m2[i]; 
    } 
    return result; 
} 
function sumProduct2D(m1, m2) { 
    var result = 0; 
    var len1 = m1.length; 
    for (var i1 = 0; i1 < len1; i1++) { 
     var len2 = m1[i1].length; 
     for (var i2 = 0; i2 < len2; i2++) { 
      result += m1[i1][i2] * m2[i1][i2]; 
     } 
    } 
    return result; 
} 

(これら関数は両方の配列を通って、関連するインデックスを掛け合わせて合計を合計します。もしあなたがsumProductに慣れていない場合には)。私は、そのマトリクス/アレイの操作方法のいくつかのためにmathJSを使用して開始し、私は私のsumProduct1Dmath.dot

var a = [1,2,3]; 
 
var b = [3,2,1]; 
 

 
console.log(sumProduct1D(a,b)); 
 
console.log(math.dot(a,b)); 
 

 
function sumProduct1D(m1, m2) { 
 
    var result = 0; 
 
    var len = m1.length; 
 
    for (var i = 0; i < len; i++) { 
 
    result += m1[i] * m2[i]; 
 
    } 
 
    return result; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/3.8.0/math.js"></script>

同じである上記のコードは同じを与えることに気づいたある時点で

私の結果とmath.dotを使用すると完璧です!


私の質問は、私の他の方法の周りにある - それは多次元配列を合計し、そしてmathJSはそれのようにdoesntの - 私は、エラーUncaught RangeError: Vector expectedを取得します。

var c = [[1,2,3],[1,2,3]]; 
 
var d = [[3,2,1],[3,2,1]]; 
 
console.log(sumProduct2D(c,d)) 
 
console.log(math.dot(c,d)) 
 

 
function sumProduct2D(m1, m2) { 
 
    var result = 0; 
 
    var len1 = m1.length; 
 
    for (var i1 = 0; i1 < len1; i1++) { 
 
    var len2 = m1[i1].length; 
 
    for (var i2 = 0; i2 < len2; i2++) { 
 
     result += m1[i1][i2] * m2[i1][i2]; 
 
    } 
 
    } 
 
    return result; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/3.8.0/math.js"></script>

私はmathJSのドキュメントに目を通すがあった、と私は私の人生のために私のsumProduct2Dを複製通話の組み合わせを一緒に置くことができません。しかし、道があるはずです。

mathJS機能を使用して誰でも私のsumProductメソッドを複製できますか?

答えて

0

これが他の人に役立つ場合は、私は結局答えを見つけました。それはmath.sum(math.dotMultiply(c,d))だった。

var c = [[1,2,3],[1,2,3]]; 
 
var d = [[3,2,1],[3,2,1]]; 
 
console.log(sumProduct2D(c,d)) 
 
console.log(math.sum(math.dotMultiply(c,d))) 
 

 
function sumProduct2D(m1, m2) { 
 
    var result = 0; 
 
    var len1 = m1.length; 
 
    for (var i1 = 0; i1 < len1; i1++) { 
 
    var len2 = m1[i1].length; 
 
    for (var i2 = 0; i2 < len2; i2++) { 
 
     result += m1[i1][i2] * m2[i1][i2]; 
 
    } 
 
    } 
 
    return result; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/3.8.0/math.js"></script>

関連する問題