【问题标题】:SumProduct multi dimensional array using mathJS使用 mathJS 的 SumProduct 多维数组
【发布时间】:2017-02-01 22:59:38
【问题描述】:

我有一些工作代码,我前段时间写的,在那里我创建了自己的 sumProduct 函数,用于对单维和多维数组执行此操作:

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;
 }
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/3.8.0/math.js"&gt;&lt;/script&gt;

上面的代码给我的和使用math.dot的结果相同-完美!


我的问题是关于我的其他方法 - 它对多维数组求和,而 mathJS 不喜欢它 - 我收到错误 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;
}
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/3.8.0/math.js"&gt;&lt;/script&gt;

我已经浏览了 mathJS 文档,但我无法将与我的 sumProduct2D 重复的调用组合在一起。但一定有办法。

任何人都可以使用mathJS 函数复制我的sumProduct 方法吗?

【问题讨论】:

    标签: javascript mathjs


    【解决方案1】:

    如果这对其他人有帮助,我最终找到了答案。我要的是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;
    }
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/3.8.0/math.js"&gt;&lt;/script&gt;

    【讨论】:

    • 非常感谢!对我有帮助!您的函数不适用于var c = [1,2,3]; var d = [3,2,1];,但 mathjs 可以。
    猜你喜欢
    • 2019-06-27
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 2022-01-23
    相关资源
    最近更新 更多