javascript - 使用 mathJS 的 SumProduct 多维数组

标签 javascript mathjs

我有一些工作代码,是我不久前编写的,我在其中创建了自己的 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;
 }
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/3.8.0/math.js"></script>

上面的代码为我提供了相同的结果,并且使用 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;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/3.8.0/math.js"></script>

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

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

最佳答案

如果这对其他人有帮助,我最终找到了答案。我追求的是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>

关于javascript - 使用 mathJS 的 SumProduct 多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41991424/

相关文章:

javascript - 如何从节点中删除文本?

JavaScript 对象检测 : dot syntax versus 'in' keyword

javascript - 以特定顺序加载(请求)javascript

Javascript链接具有不同参数的相同动画功能

javascript - 使用 MathLive 和 Vue 更新数学方程式

javascript - JavaScript 锯齿状多维数组中的逐元素算术运算

javascript - 让 React 与 math.js 库一起工作

javascript - 如何避免 mathjs 结果中的指数表示法

javascript - 验证新创建的元素

javascript - 获取已转换元素的局部坐标中的触摸位置