前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >算法系列-----矩阵(四)-------------矩阵的乘法

算法系列-----矩阵(四)-------------矩阵的乘法

作者头像
wust小吴
发布于 2022-03-04 07:53:02
发布于 2022-03-04 07:53:02
51800
代码可运行
举报
文章被收录于专栏:风吹杨柳风吹杨柳
运行总次数:0
代码可运行

乘数矩阵:也可以叫矩阵的乘数 就是说这个乘数是表示缩放这个矩阵 Xn[]

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	/**
	 * 矩阵乘数的函数
	 * 
	 * @param args
	 *            参数a是个浮点型(double)的一维数组,b是浮点数;
	 * @return 返回值是一个浮点型一维数组(列向量a乘以数b的结果)
	 */
	public static double[] multi(double[] a, double b) {
		int hang = a.length;
		double[] result = new double[hang];
		for (int i = 0; i < hang; i++) {
			result[i] = a[i] * b;
		}
		return result;
	}

行向量乘以列向量:

他们的结果作为向量乘法结果矩阵的某一个元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	/**
	 * 行向量乘以列向量的函数
	 * 
	 * @param args
	 *            参数a,b是两个浮点型(double)的一维数组
	 * @return 返回值是一个浮点型数值
	 */
	public static double multi_data(double[] a, double[] b) {
		int lie = a.length;
		double result = 0;
		for (int i = 0; i < lie; i++) {
			result += a[i] * b[i];

		}
		return result;
	}

如果单从该函数去看,需要添加判断条件:

a.length==b.length

而如果该函数被下面调用了,已经判断了a的长度和b的长度是相等的,所以这里只是单独的抽出来而已

列向量乘以行向量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
</pre><pre name="code" class="java">	/**
	 * 列向量乘以行向量的函数
	 * 
	 * @param args
	 *            参数a,b是两个浮点型(double)的一维数组
	 * @return 返回值是一个浮点型二维矩阵
	 */
	public static double[][] multi_mat(double[] a, double[] b) {
		int hang = a.length;
		int lie = b.length;
		double[][] result = new double[hang][lie];
		for (int i = 0; i < hang; i++) {
			for (int j = 0; j < lie; j++) {
				result[i][j] = a[i] * b[j];
			}
		}
		return result;
	}

矩阵相乘:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	/**
	 * 矩阵相乘的函数
	 * 
	 * @param args
	 *            参数a,b是两个浮点型(double)的二维数组
	 * @return 返回值是一个浮点型二维数组(矩阵的乘积)
	 */
	public static double[][] multi(double[][] a, double[][] b) {
		int hang = a.length;
		int lie = b[0].length;
		double sum;
		double[][] result = new double[hang][lie];
		for (int i = 0; i < hang; i++) {
			for (int j = 0; j < lie; j++) {
				sum = 0;
				for (int k = 0; k < b.length; k++) {
					sum += a[i][k] * b[k][j];
				}
				result[i][j] = sum;
			}
		}
		return result;
	}

二维矩阵和一维矩阵的相乘:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	/**
	 * 矩阵相乘的函数
	 * 
	 * @param args
	 *            参数a是个浮点型(double)的二维数组,a是一维数组
	 * @return 返回值是一个浮点型二维数组(矩阵的乘积)
	 */
	public static double[] multi(double[][] a, double[] b) {
		int hang = a.length;

		double sum;
		double[] result = new double[hang];
		for (int i = 0; i < hang; i++) {
			sum = 0;
			for (int k = 0; k < b.length; k++) {
				sum += a[i][k] * b[k];
			}
			result[i] = sum;
		}

		return result;
	}

他有个条件就是一维的长度不能大于列数

测试代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
</pre><pre name="code" class="java">	public static void main(String[] args) {
		double[] a = { 3, 2, 1, 4};
		double[] b = { 5, 6, 9, 8};
		double[] c = {1,2};	
		
		double[][] d_a = new double[][]{{1,2},{3,4}};
		double[][] d_b = new double[][]{{7, 8}, {6, 5}};
		double[][] d_c = new double[][]{{7, 8}, {6, 5},{2,4}};
		double[][] d_testa = multi(d_a,3);
		double[][] d_testb = zjz_qh(d_b,1);
		double[][] d_testc = zjz(d_c,0,0);
		double[] s_test = multi(d_c,c);
		double result = multi_data(a,b);
		double[][] result2 = multi_mat(a,b);
		System.out.println("乘数矩阵");
		System.out.println("--------------------------------");
		print(d_testa);
		System.out.println("行向量乘以列向量");
		System.out.println("--------------------------------");
		System.out.println(result);

		System.out.println("列向量乘以行向量");
		System.out.println("--------------------------------");
		print(result2);
		System.out.println("二维矩阵和一维矩阵相乘");
		System.out.println("--------------------------------");
		print_array(s_test);
	}

输出结果:

乘数矩阵 -------------------------------- 3.0 6.0 9.0 12.0 行向量乘以列向量 -------------------------------- 68.0 列向量乘以行向量 -------------------------------- 15.0 18.027.0 24.0 10.0 12.018.0 16.0 5.0 6.09.0 8.0 20.0 24.036.0 32.0 二维矩阵和一维矩阵相乘 -------------------------------- 23.0 16.010.0 矩阵相乘有个麻烦的事就是可能会遇到参数类型的影响,需要重载多次,各位还是自己写把,我这里把参数类型都写为double类型

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档