繁体   English   中英

我的矩阵乘法方法有什么问题?

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

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