class="java">
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
int a[][] = {{3,4,5},{1,2,3}};
int b[][] = {{2,7,1,3},{2,1,2,4},{1,6,2,1}};
resultOut(matrixMultiplication(a, b));
resultOut(maxtrixPermutation(a));
resultOut(maxtrixPermutation(b));
}
//矩阵相乘
public static int[][] matrixMultiplication(int a[][],int b[][]){
//a的列数要与b的行数相同
if(a[0].length!=b.length){
return null;
}
//得到两矩阵相乘后的新矩阵的行列
int aLength = a.length;
int bLength = b[0].length;
List<Integer> list = new ArrayList<Integer>();
//返回相乘后的数组
int newArray[][] = new int[aLength][bLength];
//相当于a行*b列
int totalLength = aLength * bLength;
int m = 0,k = 0;
//最外层循环用于生成矩阵
for (int i = 0; i < totalLength; i++) {
//一共计算a*b次结果,每次计算后都要将其结果清零
int result = 0;
//矩阵相乘核心计算方式
for (int n = 0; n < b.length; n++) {
result += a[m][n] * b[n][k];
}
k++;
if((i+1)%bLength==0){
m++;
k=0;
}
list.add(result);
}
//下面这些只是为了统一输出,可有可无
int count = 0;
for (int i = 0; i < newArray.length; i++) {
for (int j = 0; j < newArray[i].length; j++) {
newArray[i][j] = list.get(count);
count++;
}
}
return newArray;
}
//矩阵置换(行列置换)
public static int[][] maxtrixPermutation(int beforeArray[][]){
int column = beforeArray[0].length;
int row = beforeArray.length;
int newArray[][] = new int[column][row];
for (int i = 0; i < newArray.length; i++) {
for (int j = 0; j < newArray[i].length; j++) {
newArray[i][j] = beforeArray[j][i];
}
}
return newArray;
}
//结果输出
public static void resultOut(int array[][]){
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j]+" ");
}
System.out.println();
}
}
}