1.矩阵与矩阵之间如何想乘的-
a1 | b1 | c1 |
d1 | e1 | f1 |
a2 | b2 |
c2 | d2 |
e2 | f2 |
第一行对应数字乘以第一列对应数字相加第一行对应数字乘以第二列对应数字相加....
最终得
a1*a2+b1*c2+c1*e2 | a1*b2+b1*d2+c1*f2 |
d1*a2+e1*c2+f1*e2 | d1*b2+e1*d2+f1*f2 |
由此有规律:矩阵1的行和矩阵2的列正好是新数组的行与列,由此可用两个for循环来表示,又因为相乘时他们的列行变换时一样的且矩阵1的行变换是因矩阵2的列变换完才变换,代码如下图:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
for(int k=0;k<3;k++)
num2[i][j]+=num[i][k]*num1[k][j];
System.out.print(num2[i][j]+" ");
}
System.out.println();
}
题目:
输入一个2*3和3*2的二维数组,求两个矩阵之积。
输入
1 2 0
3 4 2
1 3
2 4
3 1
输出
5 11
17 27
代码:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[][] num = new int[2][3];
int[][] num1=new int[3][2];
int[][] num2=new int[2][2];
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
num[i][j] = sc.nextInt();
}
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
num1[i][j] = sc.nextInt();
}
}
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
for(int k=0;k<3;k++)
num2[i][j]+=num[i][k]*num1[k][j];
System.out.print(num2[i][j]+" ");
}
System.out.println();
}
}