算法系列-----矩阵(二)-------------单位矩阵的加法和减法
2014-10-10 21:05
218 查看
矩阵的加法和减法很简单,唯一的要求就是:行列相等
首先我们看一维的相加(其实就是数组的相加):
二维数组的相加:
矩阵相减:
测试代码:
最基本的操作:加和减 还是要说的。很简单
只是想说明一点:我看过很多网上的代码,有的人在加法和减法中把结果直接存在
第一个参数中返回,这让我很是犹豫,我常常会想到交换函数时并没有改变他们的值
或者是当同一个参数同时调用两个矩阵方法时,发现了a和b都变了,让我很是气恼
故而我觉得还是在代码中再定义一个局部变量比较好,尽管这样的代码不够优化,但是我看的很清楚。
首先我们看一维的相加(其实就是数组的相加):
/** * 两个一维数组相加 * * @param args * 参数a,b是两个浮点型(double)的一维数组 * @return 返回值是一个浮点型一维矩阵 */ public static double[] plus(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[i]; } return result; }打印一维数组:
public static void print_array(double[] result){ for(int i=0;i<result.length;i++){ System.out.print("\t" + result[i]); } System.out.println(); }
二维数组的相加:
/** * 矩阵相加的函数 * * @param args * 参数a,b是两个浮点型(double)的二维数组 * @return 返回值是一个浮点型二维数组(矩阵a与b的和) */ public static double[][] plus(double[][] a, double[][] b) { int hang = a.length; int lie = a[0].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][j] + b[i][j]; } } return result; }
矩阵相减:
/** * 矩阵相减的函数 * * @param args * 参数a,b是两个浮点型(double)的二维数组, * @return 返回值是一个浮点型二维数组(矩阵a与b的差) */ public static double[][] minus(double[][] a, double[][] b) { int hang = a.length; int lie = a[0].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][j] - b[i][j]; } } return result; }
测试代码:
public static void main(String[] args) { double[] a = { 3, 2, 1, 4}; double[] b = { 5, 6, 9, 8}; double[] s_test = plus(a,b); double[][] d_a = new double[][]{{1,2},{3,4}}; double[][] d_b = new double[][]{{7, 8}, {6, 5}}; double[][] d_test = plus(d_a,d_b); double[][] minus_test=minus(d_a,d_b); System.out.println("一维相加"); System.out.println("--------------------------------"); print_array(s_test); System.out.println("矩阵相加"); System.out.println("--------------------------------"); print(d_test); System.out.println("矩阵相减"); System.out.println("--------------------------------"); print(minus_test); }输出结果:
一维相加 -------------------------------- 8.0 8.0 10.0 12.0 矩阵相加 -------------------------------- 8.0 10.0 9.0 9.0 矩阵相减 -------------------------------- -6.0 -6.0 -3.0 -1.0
最基本的操作:加和减 还是要说的。很简单
只是想说明一点:我看过很多网上的代码,有的人在加法和减法中把结果直接存在
第一个参数中返回,这让我很是犹豫,我常常会想到交换函数时并没有改变他们的值
或者是当同一个参数同时调用两个矩阵方法时,发现了a和b都变了,让我很是气恼
故而我觉得还是在代码中再定义一个局部变量比较好,尽管这样的代码不够优化,但是我看的很清楚。
相关文章推荐
- 算法系列-----矩阵(一)-------------单位矩阵的生成
- 摄像机标定算法中的很多处理,都有道理。比如内参数矩阵的定义。实现了单位的归一化,使世界坐标的实际值不重要,单位也不重要,只是单位为1的方格。
- 值得注意的算法问题,“两次减法操作”竟然比“一次2倍乘法和一次加法”要慢一秒
- 线性代数·矩阵的加法减法乘法运算简单实现
- 推荐系统系列---基于movielens数据集的KNN算法与矩阵分解算法比较
- Matlab与线性代数 -- 矩阵的加法与减法
- C/C++面试之算法系列--以单词为最小单位翻转字符串
- 算法系列——不用加减乘除做加法
- 【巧妙算法系列】【Uva 11464】 - Even Parity 偶数矩阵
- 【巧妙算法系列】【Uva 11464】 - Even Parity 偶数矩阵
- 算法训练 矩阵加法
- 值得注意的算法问题,“两次减法操作”竟然比“一次2倍乘法和一次加法”要慢一秒
- 算法系列-----矩阵(三)-------------矩阵的子矩阵
- 稀疏矩阵的加法、减法、转置运算
- 算法系列-----矩阵(七)-------------矩阵的除法
- C/C++面试之算法系列--打印 N*N 螺旋矩阵
- 算法(求对输入的N个数进行加法或减法运算,得到最小的正整数的组合.)
- 算法系列-----矩阵(五)-------------矩阵的求逆
- 三元组创建矩阵 一次定位快速转置 矩阵的加法、减法、乘法
- 矩阵的加法、减法、乘法、转置