我有一些工作代码,我刚才写的,我创建了自己的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来处理它的一些矩阵/数组操作方法,我意识到我的sumProduct1D
与math.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
的调用组合。但必须有办法。
任何人都可以使用sumProduct
函数复制我的mathJS
方法吗?
答案 0 :(得分: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;
}
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/3.8.0/math.js"></script>
&#13;