java - java中二维矩阵乘法的问题

标签 java arrays matrix multidimensional-array matrix-multiplication

我的一个 java 函数一直有问题,该函数应该将 2 个 double 组乘以矩阵。

    public static double[][] matrixMultiply(double[][] m, double[][] n) {
    double[][] multipliedMatrix = new double [m.length][n[0].length];
    for (int i=0; i<m.length-1; i++)
    {
      for (int j=0; j<n[0].length-1; j++)
      {
        for (int k=0; k<n.length-1; k++)
        {
        multipliedMatrix[i][j] = multipliedMatrix[i][j] + (m[i][k] * n[k][j]);
        }
      }
    }
    return multipliedMatrix;
  }

i 变量应该在 for 循环中循环遍历 m(第一个矩阵)的每个元素。 j 变量应该循环遍历第二个矩阵 n 的每一行,变量 k 应该循环遍历第一个矩阵的第一行和第二个矩阵的第一列中的每个元素。这似乎没有正常工作,并且在给定输入时

[[1.0, 2.0, 3.0, 4.0], 
 [5.0, 6.0, 7.0, 8.0], 
 [9.0, 1.0, 2.0, 3.0]], 

[[1.0, 2.0, 3.0], 
 [4.0, 5.0, 6.0], 
 [7.0, 8.0, 9.0], 
 [1.0, 2.0, 3.0]] 

它给出了

[[30.0, 36.0, 0.0], 
 [78.0, 96.0, 0.0], 
 [0.0, 0.0, 0.0]] 

而不是

[[34.0, 44.0, 54.0], 
 [86.0, 112.0, 138.0], 
 [30.0, 45.0, 60.0]]. 

我不明白这是为什么?

最佳答案

修复:

     public static double[][] matrixMultiply(double[][] m, double[][] n) {
        double[][] multipliedMatrix = new double [m.length][n[0].length];
        for (int i=0; i<m.length; i++)
        {
            for (int j=0; j<n[0].length; j++)
            {
                for (int k=0; k<n.length; k++)
                {
                    multipliedMatrix[i][j] = multipliedMatrix[i][j] + (m[i][k] * n[k][j]);
                }
            }
        }
        return multipliedMatrix;
    }

输出

34.044.054.0
86.0112.0138.0
30.045.060.0

解释
在每个循环中,您应该在索引小于长度时运行 - 不小于 length-1

关于java - java中二维矩阵乘法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20025203/

相关文章:

java - Guice:如何为所有类型绑定(bind)泛型?

java - glfw pollevents() 真的非常慢

arrays - 使用按位与在数组中搜索位模式的最佳算法是什么?

c - 找出数字 5 在 0 - 4322 内出现了多少次

c - 双重释放或腐败(!prev)

R 申请 : loses dimname names

c - drand48 返回全 0? (C)

java - 使用 MouseAdapter 在 Java 中进行 Tic Tac Toe 游戏

java - 如何避免java多播中缓冲区大小的限制?

c++ - 包含由换行符分隔的单词的文件和 C++ 中这些单词的字符串 vector 是否具有相同的大小?