开发者

How can I concatenate multiple rows in a matrix

开发者 https://www.devze.com 2022-12-23 05:20 出处:网络
In Java I would like to concatenate an array (a[], fixed length) to an array of the same length, to create a matrix M[2][length of a]. This way I would like to subsequently paste more of those arra开发

In Java I would like to concatenate an array (a[], fixed length) to an array of the same length, to create a matrix M[2][length of a]. This way I would like to subsequently paste more of those arra开发者_如何学JAVAys onto the matrix. (Comparable to the Matlab vertcat function..C=[A;B]) Is this possible? Thanks


Yes, it is possible. Here is an example:

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("");
        }
    }
}

The above prints out:

 1 2 3
 4 5 6

We can do even better than that, though. If you are using Java 5 or higher, use:

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

Then you can write:

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

And it will work for any number of arguments.

Edit
The above method stuffs the original arrays into another array, which means that any modification to the result will affect the original arrays, which may be undesireable. Use the following to copy the values:

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;
}

If you want vertcat to return a copy rather than the original, you can redefine it as:

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


As far as I know, Java has no built-in support for matrices and matrix-related operations. I would either use a 2D array, write my own Matrix wrapper class (in simpler cases) or hunt down a good Matrix library (e.g. http://jmathtools.berlios.de/).

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号