在Java中,我想將數組(a [],固定長度)連接到相同長度的數組,以創建一個矩陣M [2] [length of a] 。這樣我想隨後將更多這些數組粘貼到矩陣上。 (與Matlab的vertcat函數類似...... C = [A; B]) 這可能嗎? 謝謝如何連接矩陣中的多行
1
A
回答
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/)。
顯然這是可能的。但是你需要什麼編程語言? – Frank 2010-03-19 10:30:31
對不起,忘了提。在Java中。 – Matthijs 2010-03-19 10:34:56