[英]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.