java中二维矩阵乘法的问题

kab*_*hra 4 java arrays matrix multidimensional-array matrix-multiplication

我一直遇到一个java函数的问题,它应该将2个双数组乘以矩阵.

    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;
  }
Run Code Online (Sandbox Code Playgroud)

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]] 
Run Code Online (Sandbox Code Playgroud)

它给出了

[[30.0, 36.0, 0.0], 
 [78.0, 96.0, 0.0], 
 [0.0, 0.0, 0.0]] 
Run Code Online (Sandbox Code Playgroud)

而不是

[[34.0, 44.0, 54.0], 
 [86.0, 112.0, 138.0], 
 [30.0, 45.0, 60.0]]. 
Run Code Online (Sandbox Code Playgroud)

我不明白为什么会这样?

alf*_*sin 5

固定:

     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;
    }
Run Code Online (Sandbox Code Playgroud)

OUTPUT

34.044.054.0
86.0112.0138.0
30.045.060.0
Run Code Online (Sandbox Code Playgroud)

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