第八天:矩阵相乘

1、实现两个矩阵相乘的前提:矩阵A的列数等于矩阵B的行数,矩阵A与矩阵B才能相乘。

2、由两个矩阵相乘得到的矩阵的每一个元素是由第一个矩阵每一行元素分别乘上第二个矩阵的列对应的元素再相加。比如矩阵C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。

3、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。


两个矩阵相乘函数代码为:

public static int[][] multiplication(int[][] paraFirstMatrix, int[][] paraSecondMatrix) {
		int m = paraFirstMatrix.length;//获取第一个矩阵的行数
		int n = paraFirstMatrix[0].length;//获取第一个矩阵的列数
		int p = paraSecondMatrix[0].length;//获取第二个矩阵的列数

		// 判断两个矩阵是否可以相乘
		if (paraSecondMatrix.length != n) {//比较第二个矩阵的行数是否等于第一个矩阵的列数
			System.out.println("The two matrices cannot be multiplied.");//输出两个矩阵不能相乘
			return null;
		}

		int[][] resultMatrix = new int[m][p];//定义结果矩阵
		for (int i = 0; i < m; i++) {
			for (int j = 0; j < p; j++) {
				for (int k = 0; k < n; k++) {
					resultMatrix[i][j] += paraFirstMatrix[i][k] * paraSecondMatrix[k][j];
				} //第i行乘以第j列,然后相加为结果矩阵的i,j值
			} 
		} 

		return resultMatrix;//返回结果矩阵
	}

完成代码详解:

获取第一个矩阵和第二个矩阵,第一个矩阵乘以第二个矩阵作为第三个矩阵。

package eight_day;


import java.util.Arrays;


public class eightday {

	
	public static void main(String args[]) {
		matrixMultiplicationTest();
	}

	//矩阵相乘函数
	public static int[][] multiplication(int[][] paraFirstMatrix, int[][] paraSecondMatrix) {
		int m = paraFirstMatrix.length;//获取第一个矩阵的行数
		int n = paraFirstMatrix[0].length;//获取第一个矩阵的列数
		int p = paraSecondMatrix[0].length;//获取第二个矩阵的列数

		// 判断两个矩阵是否可以相乘
		if (paraSecondMatrix.length != n) {//比较第二个矩阵的行数是否等于第一个矩阵的列数
			System.out.println("两个矩阵不能相乘.");//输出两个矩阵不能相乘
			return null;
		}

		int[][] resultMatrix = new int[m][p];
		for (int i = 0; i < m; i++) {
			for (int j = 0; j < p; j++) {
				for (int k = 0; k < n; k++) {
					resultMatrix[i][j] += paraFirstMatrix[i][k] * paraSecondMatrix[k][j];
				} //第i行乘以第j列,然后相加为结果矩阵的i,j值
			} 
		} 

		return resultMatrix;//返回结果矩阵
	}

	
	
	public static void matrixMultiplicationTest() {
		int[][] tempFirstMatrix = new int[2][3];
		for (int i = 0; i < tempFirstMatrix.length; i++) {
			for (int j = 0; j < tempFirstMatrix[0].length; j++) {
				tempFirstMatrix[i][j] = i + j;//产生第一个测试矩阵,大小2*3
			} 
		} 
		System.out.println("第一个矩阵: \r\n" + Arrays.deepToString(tempFirstMatrix));

		
		int[][] tempSecondMatrix = new int[3][2];
		for (int i = 0; i < tempSecondMatrix.length; i++) {
			for (int j = 0; j < tempSecondMatrix[0].length; j++) {
				tempSecondMatrix[i][j] = i * 10 + j;//产生第二个测试矩阵,大小3*2
			}
		} 
		System.out.println("第二个矩阵: \r\n" + Arrays.deepToString(tempSecondMatrix));

		//输出第一个测试矩阵乘以第二个测试矩阵的结果,大小2*2
		int[][] tempThirdMatrix = multiplication(tempFirstMatrix, tempSecondMatrix);
		System.out.println("第一个矩阵乘以第二个矩阵的结果: \r\n" + Arrays.deepToString(tempThirdMatrix));

		System.out.println();
		System.out.print("第一个矩阵乘以第三个矩阵:\r\n");
		//因为第一个矩阵大小为2*3,而第三个矩阵大小为2*2,第一矩阵的列数不等于第三矩阵的行数,所以不能相乘
		
		tempThirdMatrix = multiplication(tempFirstMatrix, tempFirstMatrix);
		System.out.println("结果是: \r\n" + Arrays.deepToString(tempThirdMatrix));
	}

}

第八天:矩阵相乘_第1张图片

 

你可能感兴趣的:(java)