我需要在JAMA中连接两个矩阵。
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我该怎么做呢?
发布于 2014-01-30 18:29:13
假设结果矩阵的行应该是原始矩阵的行的副本:
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()));
}发布于 2017-02-22 19:40:05
我在JamaUtils类中找到了这个解决方案:
/**
* Appends additional rows to the first matrix.
*
* @param m the first matrix.
* @param n the matrix to append containing additional rows.
* @return a matrix with all the rows of m then all the rows of n.
*/
public static Matrix rowAppend(Matrix m, Matrix n) {
int mNumRows = m.getRowDimension();
int mNumCols = m.getColumnDimension();
int nNumRows = n.getRowDimension();
int nNumCols = n.getColumnDimension();
if (mNumCols != nNumCols)
throw new IllegalArgumentException("Number of columns must be identical to row-append.");
Matrix x = new Matrix(mNumRows + nNumRows, mNumCols);
x.setMatrix(0, mNumRows - 1, 0, mNumCols - 1, m);
x.setMatrix(mNumRows, mNumRows + nNumRows - 1, 0, mNumCols - 1, n);
return x;
}https://stackoverflow.com/questions/21453446
复制相似问题