第八天:矩阵相乘

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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值