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)
我不明白为什么会这样?
固定:
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