Как я могу объединить несколько строк в матрице - PullRequest
1 голос
/ 19 марта 2010

В Java я хотел бы объединить массив (a [], фиксированная длина) с массивом такой же длины, чтобы создать матрицу M [2] [длина a]. Таким образом, я хотел бы впоследствии вставить больше этих массивов в матрицу. (Сравнимо с функцией Matlab vertcat..C = [A; B]) Это возможно? Спасибо

Ответы [ 2 ]

2 голосов
/ 19 марта 2010

Да, это возможно. Вот пример:

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 голосов
/ 19 марта 2010

Насколько я знаю, в Java нет встроенной поддержки матриц и операций с матрицами. Я бы либо использовал 2D-массив, либо написал свой собственный класс-обертку Matrix (в более простых случаях), либо выискивал бы хорошую библиотеку Matrix (например, http://jmathtools.berlios.de/).

).
...