如何在矩阵中连接多个行

时间:2010-03-19 10:22:00

标签: java matrix concatenation

在Java中,我想将数组(a [],固定长度)连接到相同长度的数组,以创建矩阵M [2] [a的长度]。这样我想随后将更多这些数组粘贴到矩阵上。 (与Matlab vertcat函数相似...... C = [A; B]) 这可能吗? 感谢

2 个答案:

答案 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/)。