2010-03-19 62 views
1

在Java中,我想將數組(a [],固定長度)連接到相同長度的數組,以創建一個矩陣M [2] [length of a] 。這樣我想隨後將更多這些數組粘貼到矩陣上。 (與Matlab的vertcat函數類似...... C = [A; B]) 這可能嗎? 謝謝如何連接矩陣中的多行

+0

顯然這是可能的。但是你需要什麼編程語言? – Frank 2010-03-19 10:30:31

+0

對不起,忘了提。在Java中。 – Matthijs 2010-03-19 10:34:56

回答

2

是的,這是可能的。這裏有一個例子:

 
public class Main 
{ 
    public static void main(String[] args) 
    { 
     int[] A = new int[]{1, 2, 3}; 
     int[] B = new int[]{4, 5, 6}; 
     int[][] M = new int[2][]; 
     M[0] = A; 
     M[1] = B; 

     for (int i = 0; i < 2; i ++){ 
      for (int j = 0; j < M[i].length; j++){ 
       System.out.print(" "+ M[i][j]); 
      } 
      System.out.println(""); 
     } 
    } 
} 

上面打印出:

 
1 2 3 
4 5 6 

我們可以做的比這還要好,雖然。如果你正在使用Java 5或更高版本,使用方法:

 
public static int[][] vertcat(int[]... args){ 
    return args; 
} 

然後,你可以寫:

 
int[][] M = vertcat(A,B); 

而且它適用於任何數量的參數工作。

編輯
上述方法充塞原始陣列到另一個陣列,這意味着任何修改其結果將影響原始陣列,其可以是不希望的。使用以下方法來複制值:

 
public static int[][] copyMatrix(int[][] original){ 
    if ((original==null) || (original.length==0) || (original[0].length == 0)){ 
     throw new IllegalArgumentException("Parameter must be non-null and non-empty"); 
    } 
    rows = original.length; 
    cols = original[0].length; 
    int[][] cpy = new int[rows][cols]; 
    for (int row = 0; row < rows; row++){ 
     System.arraycopy(original[row],0,cpy[row],0,cols); 
    } 
    return cpy; 
} 

如果你想vertcat返回一個副本而不是原始的,你可以重新定義爲:

 
public static int[][] vertcat(int[]... args){ 
    return copyMatrix(args); 
} 
+0

但請記住,* matrix *元素仍然是原始數組。對矩陣的值所做的任何更改都會反映在原始數組中,並且相反。 – 2010-03-19 12:32:25

+0

@卡洛斯,是的,這是正確的。謝謝你注意到這一點。 – 2010-03-19 21:55:27

0

據我所知,Java沒有內置對矩陣和矩陣相關操作的支持。我要麼使用二維數組,編寫我自己的Matrix包裝類(在更簡單的情況下),要麼尋找一個好的矩陣庫(例如http://jmathtools.berlios.de/)。