1

JAMA で 2 つの行列を連結する必要があります。

double[][] m1  = {{1,1,1}, {1,1,1}};    
double[][] m2 =  {{2,2,2}, {2,2,2}, {2,2,2}};

Matrix mm1 = new Matrix(m1);
Matrix mm2 = new Matrix(m2);

私は次のことをしたい、

Matrix mm3 = [ mm1; mm2; ] // in Matlab syntax

次のマトリックスが返されます。

1 1 1
1 1 1
2 2 2
2 2 2
2 2 2

どうやってやるの?

4

2 に答える 2

2

結果の行列の行が元の行列の行のコピーであると仮定すると、次のようになります。

import java.util.Arrays;

public class MatrixConcat
{
    public static void main(String[] args)
    {
        double[][] m1  = {{1,1,1}, {1,1,1}};
        double[][] m2 =  {{2,2,2}, {2,2,2}, {2,2,2}};

        double[][] m3 = combine(m1, m2);

        System.out.println("m1");
        print(m1);
        System.out.println("m2");
        print(m2);
        System.out.println("m3");
        print(m3);

    }

    private static void print(double m[][])
    {
        for (int i=0; i<m.length; i++)
        {
            System.out.println(Arrays.toString(m[i]));
        }
    }

    private static double[][] combine(double m0[][], double m1[][])
    {
        double result[][] = new double[m0.length+m1.length][];
        for (int i=0; i<m0.length; i++)
        {
            result[i] = m0[i].clone();
        }
        for (int i=0; i<m1.length; i++)
        {
            result[m0.length+i] = m1[i].clone();
        }
        return result;
    }
}

編集:マトリックスのみがあり、それらが作成された配列ではなく、新しいマトリックスが必要であると仮定すると、double[][]別のメソッドを追加できます

private static Matrix concat(Matrix m0, Matrix m1)
{
    return new Matrix(combine(m0.getArray(), m1.getArray()));
}
于 2014-01-30T10:29:13.343 に答える