在Java中,我想将数组(a [],固定长度)连接到相同长度的数组,以创建矩阵M [2] [a的长度]。这样我想随后将更多这些数组粘贴到矩阵上。 (与Matlab vertcat函数相似...... C = [A; B]) 这可能吗? 感谢
答案 0 :(得分: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); }
答案 1 :(得分:0)
据我所知,Java没有对矩阵和矩阵相关操作的内置支持。我会使用2D数组,编写我自己的Matrix包装类(在更简单的情况下)或搜索一个好的Matrix库(例如http://jmathtools.berlios.de/)。