我的一个 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/