在 Java 中乘以不同维度的二维数组时遇到问题
Trouble multiplying 2D arrays of different dimensions in Java
我有以下代码,我试图让它将数组 a 乘以数组 b 并生成数组 c。我在这里浏览了几个问题,由于某种原因我无法让数组产生正确的结果,我相信是因为它没有将正确的索引相乘。任何帮助将不胜感激,因为我仍在努力了解数组乘法的工作原理。这是代码:
class Main
{
public static void main (String[] args)
{
int[][]a =
{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
//print array a
};
for(int i = 0; i < a[0].length-1; i++)
{
for(int j = 0; j < a[0].length; j++)
{
System.out.print(a[i][j] + " ");
}
System.out.println();
}
int[][]b =
{
{-1,-2,-3},
{-4,-5,-6},
{-7,-8,-9},
{-10,-11,-12},
};
System.out.println();
//print array b
for(int i = 0; i < b.length; i++)
{
for(int j = 0; j < b.length-1; j++)
{
System.out.print(b[i][j] + " ");
}
System.out.println();
}
System.out.println();
int[][]c = new int[a.length][b[0].length];
if(b.length == a[0].length)
{
for(int i = 0; i < a.length; i++)
{
for (int j = 0; j < b[0].length; j++)
{
for (int k = 0; k < a[0].length; k++)
{
c[i][j] = a[i][k]*b[k][j];
}
}
}
}
else
{
System.out.println("Dimension requirements not satisfied for accurate calculation");
}
for(int i = 0; i < c.length; i++)
{
for(int j = 0; j < c.length; j++)
{
System.out.print(c[i][j] + " ");
}
System.out.println();
}
}
}
将c[i][j] = a[i][k]*b[k][j];
更改为c[i][j] += a[i][k]*b[k][j];
@Jeffrey Chen 的回答是正确的,因为在矩阵乘法中,第一个矩阵的每一行乘以第二个矩阵的每一列
在你的情况下,矩阵 a 的第 1 行是 1、2、3、4
矩阵 b 的第 1 列是 -1, -4, -7, -10
所以答案是(1*-1)+(2*-4)+(3*-7)+(4*-10)
= -1-8-21-40 = -70
然后矩阵a的第一行乘以矩阵b的第二列
(1*-2)+(2*-5)+(3*-8)+(4*-11)
= -2-10-24-44 = -80
以此类推
所以以下是正确的
c[i][j] += a[i][k] * b[k][j];
我有以下代码,我试图让它将数组 a 乘以数组 b 并生成数组 c。我在这里浏览了几个问题,由于某种原因我无法让数组产生正确的结果,我相信是因为它没有将正确的索引相乘。任何帮助将不胜感激,因为我仍在努力了解数组乘法的工作原理。这是代码:
class Main
{
public static void main (String[] args)
{
int[][]a =
{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
//print array a
};
for(int i = 0; i < a[0].length-1; i++)
{
for(int j = 0; j < a[0].length; j++)
{
System.out.print(a[i][j] + " ");
}
System.out.println();
}
int[][]b =
{
{-1,-2,-3},
{-4,-5,-6},
{-7,-8,-9},
{-10,-11,-12},
};
System.out.println();
//print array b
for(int i = 0; i < b.length; i++)
{
for(int j = 0; j < b.length-1; j++)
{
System.out.print(b[i][j] + " ");
}
System.out.println();
}
System.out.println();
int[][]c = new int[a.length][b[0].length];
if(b.length == a[0].length)
{
for(int i = 0; i < a.length; i++)
{
for (int j = 0; j < b[0].length; j++)
{
for (int k = 0; k < a[0].length; k++)
{
c[i][j] = a[i][k]*b[k][j];
}
}
}
}
else
{
System.out.println("Dimension requirements not satisfied for accurate calculation");
}
for(int i = 0; i < c.length; i++)
{
for(int j = 0; j < c.length; j++)
{
System.out.print(c[i][j] + " ");
}
System.out.println();
}
}
}
将c[i][j] = a[i][k]*b[k][j];
更改为c[i][j] += a[i][k]*b[k][j];
@Jeffrey Chen 的回答是正确的,因为在矩阵乘法中,第一个矩阵的每一行乘以第二个矩阵的每一列
在你的情况下,矩阵 a 的第 1 行是 1、2、3、4 矩阵 b 的第 1 列是 -1, -4, -7, -10
所以答案是(1*-1)+(2*-4)+(3*-7)+(4*-10) = -1-8-21-40 = -70
然后矩阵a的第一行乘以矩阵b的第二列
(1*-2)+(2*-5)+(3*-8)+(4*-11) = -2-10-24-44 = -80
以此类推
所以以下是正确的
c[i][j] += a[i][k] * b[k][j];