繁体   English   中英

NaN出于矩阵乘法?

[英]NaN out of matrix multiplication?

我有下面的代码用于从数组及其乘法中形成矩阵。

但是,当我尝试将mtp(matrix(2,2,[1,2,3,4]),matrix(2,2,[1,0,0,1]))这两个矩阵相乘时mtp(matrix(2,2,[1,2,3,4]),matrix(2,2,[1,0,0,1]))mtp(matrix(2,2,[1,2,3,4]),matrix(2,2,[1,0,0,1]))返回NaN的地方。
请帮帮我

 function matrix(m, n, arr) { var result = {}; for (t = 1; t <= m; t++) { result[t] = {}; }; for (i = 1; i <= m; i++) for (j = 1; j <= n; j++) result[i][j] = arr[m * (i - 1) + j - 1]; return { "result": result, "m": m, "n": n }; } function mtp(a, b) { if (parseInt(an) != parseInt(bm)) { return; } else { var result = []; var m = parseInt(am); var n = parseInt(bn); var k = parseInt(an); for (i = 1; i <= m; i++) { for (j = 1; j <= n; j++) { for (p = 1; p <= k; p++) { result[m * (i - 1) + j - 1] += (parseInt(a.result[i][p]) * parseInt(b.result[p][j])); console.log(parseInt(a.result[i][p]) * parseInt(b.result[p][j])) } } } } console.log(result, matrix(m, n, result).result); } mtp(matrix(2,2,[1,2,3,4]),matrix(2,2,[1,0,0,1])); 

当您定义result它是零元素的数组

var result = [];

当您尝试将数字添加到数组的元素时,该元素未定义,将任何数字添加到undefined都会得到NaN 有两种方法可以解决此问题,或者使用正确的零长度初始化数组,或者在求和期间将其默认为零。 我在下面选择了后者

result[m * (i - 1) + j - 1] = (result[m * (i - 1) + j - 1]||0) + (a.result[i][p] * b.result[p][j]);
// Note here ---------------------------------------------^

我摆脱了所有不必要的parseInt调用。

 function matrix(m, n, arr) { var result = {}; for (t = 1; t <= m; t++) { result[t] = {}; }; for (i = 1; i <= m; i++) for (j = 1; j <= n; j++) result[i][j] = arr[m * (i - 1) + j - 1]; return { "result": result, "m": m, "n": n }; } function mtp(a, b) { if (an != bm) { return; } else { var result = []; var m = am; var n = bn; var k = an; for (i = 1; i <= m; i++) { for (j = 1; j <= n; j++) { for (p = 1; p <= k; p++) { result[m * (i - 1) + j - 1] = (result[m * (i - 1) + j - 1]||0) + (a.result[i][p] * b.result[p][j]); console.log(a.result[i][p] * b.result[p][j]) } } } } console.log(result, matrix(m, n, result).result); } mtp(matrix(2,2,[1,2,3,4]),matrix(2,2,[1,0,0,1])); 

在您的mtp()函数中,结果数组中的元素值未初始化(也就是说,您已经定义了一个数组,但是该数组没有实际值,甚至没有确定的长度),因此在+= ,您引用的是新创建的数组元素,该元素没有默认值(因此是undefined ),并向该未定义值添加一些数字。

未定义的值加上数字不是数字( NaN )。 尝试预初始化结果数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM