2013-03-16 66 views
4

不要任何人有,我可以转用Java的基质中有如下形式的函数:转置双[] []矩阵与Java函数?

double[][] 

我有这样的功能:某处

public static double[][] transposeMatrix(double [][] m){ 
    for (int i = 0; i < m.length; i++) { 
     for (int j = i+1; j < m[0].length; j++) { 
      double temp = m[i][j]; 
      m[i][j] = m[j][i]; 
      m[j][i] = temp; 
     } 
    } 

    return m; 
} 

但它是错误的。

+5

来实现使然后尝试问 – Sach 2013-03-16 13:15:44

+0

'对(INT J = + 1; ...'=>'对(INT J = 0; ... )' - 你也不需要返回m,这个调用者已经有了一个参考。 – assylias 2013-03-16 13:21:58

+0

@Pshemo这个人似乎太快了一点,似乎... – assylias 2013-03-16 13:24:22

回答

17
public static double[][] transposeMatrix(double [][] m){ 
     double[][] temp = new double[m[0].length][m.length]; 
     for (int i = 0; i < m.length; i++) 
      for (int j = 0; j < m[0].length; j++) 
       temp[j][i] = m[i][j]; 
     return temp; 
    } 
+1

不应该检查'm [0]'是否不会产生'IndexOutOfBoundsException'? – 2015-11-04 17:28:50

1

的Java类矩阵转置: -

import java.util.Scanner; 

public class Transpose { 

    /** 
    * @param args 
    */ 

    static int col; 
    static int row; 
    static int[][] trans_arr = new int[col][row]; 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     Scanner sc = new Scanner(System.in); 
     int m = sc.nextInt(); 
     col = m; 
     int n = sc.nextInt(); 
     row = n; 

     int[][] arr = new int[row][col]; 
     for (int i = 0; i < row; i++) { 
      for (int j = 0; j < col; j++) { 
       arr[i][j] = sc.nextInt(); 
       System.out.print(arr[i][j] + " "); 
      } 
      System.out.println(); 
     } 
     int[][] trans_arr = new int[col][row]; 
     for (int i = 0; i < row; i++) { 
      for (int j = 0; j < col; j++) { 
       trans_arr[j][i] = arr[i][j]; 
      } 
     } 
     for (int i = 0; i < col; i++) { 
      for (int j = 0; j < row; j++) { 
       System.out.print(trans_arr[i][j] + " "); 

      } 
      System.out.println(); 
     } 

    } 

} 
0

如果你想使用一个外部库,Apache的百科全书数学提供了矩阵转置的效用。请参阅official site

首先,您必须创建一个双数组double[][] arr,正如您已经完成的那样。然后,转置2D矩阵可以这样

MatrixUtils.createRealMatrix(arr).transpose().getData()