java 矩阵转置算法

工作中用到了行列转置,把这两种情况的算法记下来,以便后用

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 }

测试结果:

   

时间: 2024-10-25 23:50:48

java 矩阵转置算法的相关文章

矩阵应用实例及js实现矩阵转置算法

场景: 后端返回的是[['2015-1-1',1,1],['2015-1-2',1,2]]这样的Json数组,代表的意思是2015-1-1这个日期下新增的数据为1,减少的数据为1,2015-1-2这个日期,新增的数据为1,减少的数据为2,但是在统计图表上要在x轴显示时间,y轴显示新增和减少的数据这时,就要把数据转化成[['2015-1-1','2015-1-2'],[1,1],[1,2]]这样的结构,这也可以叫做矩阵的转置. 关于矩阵转置,可以用下图简单说明一下: 图片描述(最多50字) A表示

矩阵转置的两种算法

#include <cstdio> #include <cstdlib> //#define _OJ_ typedef struct Triple1 { int i1; int j1; int data; //用三元组表来存储稀疏矩阵 } Triple1, *Triple; typedef struct Matrix1 { Triple1 elem[100]; int row; int colum; int cnt; //压缩矩阵行数列数及非零数的个数 } Matrix1, *Ma

1154: 零起点学算法61——矩阵转置

1154: 零起点学算法61--矩阵转置 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 1324  Accepted: 698[Submit][Status][Web Board] Description 现要求你把一个矩阵行列转置后输出,注意行数和列数可能不相同的. Input 多组测试数据,每组测试数据先在一行输入n 和m ,表示这个矩阵的行数和列数(1 < n,m <= 10) 然后是n行

(算法)求矩阵转置

题目: 编写一个函数,输入为一个矩阵,打印这个矩阵转置后的结果. 例: 输入矩阵是 1,2,3,4 5,6,7,8 9,10,11,12 13,14,15,16 打印结果应该是 13,9,5,1 14,10,6,2 15,11,7,3 16,12,8,4 思路: 1.从外到内,一圈一圈地循环替换: 2.对矩阵进行从[i,j]到[j,i]的交换,然后在进行列的首尾交换: 代码: #include<iostream> #include<vector> using namespace s

C语言之基本算法42—矩阵转置及按行按列排序

//矩阵转置 按行按列排序 /* ================================================================== 题目:输入m*n矩阵,按行升序排列输出. 输入: 4 3 5 6 2 9 8 1 2 8 7 1 2 3 8 输出: 2 3 4 5 6 1 2 8 8 9 1 2 3 7 8 ================================================================== */ #includ

稀疏矩阵的三元组顺序表存储及矩阵相乘算法小结

稀疏矩阵的三元组顺序表存储及矩阵相乘算法小结 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo) 一:稀疏矩阵的三元组顺序表数据结构 typedef int ElemType; typedef struct { intx, y;  //该非零元素的行下标和列下标 ElemTypee; //该非零元素的值 } Triple; typedef struct { Tripledata[MAXSIZE]; //非零元素三元组顺序表 intmu, nu, t

Java经典问题算法大全

Java经典问题算法大全/*[程序1]题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... */ package cn.com.flywater.FiftyAlgorthm; public class FirstRabbit {public static final int MONTH = 15;public static v

稀疏矩阵的普通转置与快速转置算法

稀疏矩阵的普通转置与快速转置算法 一般来说,对于系数矩阵,我们使用三元组来存储.即就是将矩阵的所有非零元素的三元组存放在一个顺序表中,如图所示: 注意一个转置的前提:该顺序表是排好序的,即行优先,列其次. 一.普通转置 这种算法比较简单,也很容易想到: 算法思想: 对M.data从头至尾扫描: ?第一次扫描时,将M.data中列号为1的三元组赋值到T.data中 ?第二次扫描时,将M.data中列号为2的三元组赋值到T.data中 ?依此类推,直至将M.data所有三元组赋值到T.data中 代

JAMA:Java矩阵包

原文链接:JAMA:Java矩阵包 API文档链接:线性代数Java包 JAMA jama是一个非常好用的java的线性代数软件包.适用于日常编程可能碰到的各种矩阵运算问题,提供了一个优雅的简便的解决方案. jama:java 矩阵包 背景 jama是一个基本的线性代数java包,它提供了实数非稀疏矩阵类,程序员可构造操控这些类.对于经常使用到矩阵运算的码农来说,即使不精通线性代数也没有关系,因为jama包提供的功能已经够用,调用方便,使用自然,而且易于理解.Jama包意欲称为java的标准矩阵