工作中用到了行列转置,把这两种情况的算法记下来,以便后用
1.行列数相等的转置
1 /**
2 * @description 矩阵转置
3 * @author oldmonk
4 * @time 2017年8月18日
5 */
6 public class test {
7
8 public static void main(String [] args) {
9 int data [][] = new int [] [] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } } ;
10 System.out.println("----------------转置前------------------------") ;
11 print1(data) ;
12 reverse(data) ;
13 System.out.println("----------------转置后------------------------") ;
14 print1(data) ;
15 }
16
17 // 将矩阵转置
18 public static void reverse(int temp [][]) {
19 for (int i = 0; i < temp.length; i++) {
20 for (int j = i; j < temp[i].length; j++) {
21 int k = temp[i][j] ;
22 temp[i][j] = temp[j][i] ;
23 temp[j][i] = k ;
24 }
25 }
26 }
27
28 // 将矩阵输出
29 public static void print1(int temp [][]) {
30 for (int i = 0; i < temp.length; i++) {
31 for (int j = 0; j < temp[i].length; j++) {
32 System.out.print(temp[i][j] + "\t") ;
33 }
34 System.out.println() ;
35 }
36 }
37 }
测试结果:
2.任意数组转置
1 /**
2 * @description 任意数组转置
3 * @author oldmonk
4 * @time 2017年8月18日
5 */
6 public class test2 {
7
8 public static void main(String [] args)// 测试
9 {
10 double [][] TestMatrix = { { 1, 22, 34, 22 }, { 1, 11, 5, 21 }, { 7, 2, 13, 19 } } ;
11 double [][] MatrixC = Transpose(TestMatrix, 3, 4) ;
12
13 System.out.println("-------转置前---------") ;
14 myPrint(TestMatrix);
15 System.out.println("-------转置后---------") ;
16 myPrint(MatrixC);
17 }
18
19 /**
20 * @descript 任意二维数组转置
21 * @author xujingyang
22 * @time 2017年8月17日
23 */
24 public static double [][] Transpose(double [][] Matrix, int Line, int List) {
25 double [][] MatrixC = new double [List] [Line] ;
26 for (int i = 0; i < Line; i++) {
27 for (int j = 0; j < List; j++) {
28 MatrixC[j][i] = Matrix[i][j] ;
29 }
30 }
31 return MatrixC ;
32 }
33
34 // 将矩阵输出
35 public static void myPrint(double temp [][]) {
36 for (int i = 0; i < temp.length; i++) {
37 for (int j = 0; j < temp[i].length; j++) {
38 System.out.print(temp[i][j] + "\t") ;
39 }
40 System.out.println() ;
41 }
42 }
43 }
测试结果:
作者:oldmonk