[英]What is wrong with my matrix multiplication method?
我正在使用Java编写矩阵乘法方法。 我的课是Table
,它是一个二维数组。 这是Table
的构造函数:
public Table(int n, int m, int val)
{
assert(n > 0 && m > 0);
elements = new int[n][m];
for(int row = 0; row < elements.length; row++)
{
for(int col = 0; col < elements[row].length; col++)
{
elements[row][col] = val;
}
}
}
这就是我正在谈论的方法:
public static Table product(Table a, Table b)
{
assert(a.numCols() == b.numRows()) : "different dimensions!" + null;
Table c = new Table(a.numRows(), b.numCols(),0);
int res = 0;
for(int row = 0; row < a.numRows(); row++)
{
for(int col = 0; col < b.numCols(); col++)
{
for(int k = 0; k < a.numCols(); k ++)
{
res = res + a.get(row, k) * b.get(k, col);
c.set(row, col, res);
}
}
}
System.out.println(c.toString());
return c;
}
方法乘积应返回一个新的Table
,该Table
是a和b相乘的结果。 我认为应该做什么是很清楚的。 问题在于它只能正确计算c[0][0]
; 因此c.get(0,0)
的计算正确,但是之后的结果却不正确。 看到我在做什么错吗? 我感谢您的帮助。
看起来很奇怪的第一件事是:
int res = 0;
也应该在其他地方重设它。 希望有帮助:)
...
for(int col = 0; col < b.numCols(); col++)
{
res = 0;
for(int k = 0; k < a.numCols(); k ++)
....
在整个循环之外,始终将res
始终设置为零。 在乘法核心例程中,它的值没有多大意义。 重新检查循环逻辑。
在第一个循环中重置res(可能需要对循环进行一些重新排序,尚未检查并且矩阵是很久以前的)或只是更改
res = res + a.get(row, k) * b.get(k, col);
至
res = c.get(row, col) + a.get(row, k) * b.get(k, col);
int res = 0;
应该在第二个和第三个for循环之间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.