Java高效矩阵运算库EJML使用

1 引言

在编写算法时,常涉及到矩阵的相关计算,包括加、减、乘、除、转置、求逆等,Efficient Java Matrix Library(EJML)是第三方高效矩阵运算包,对其用法进行记录和总结。

2 自动导入Jar包

IDEA中利用maven自动下载第三方Jar包

3 使用SimpleMatrix创建矩阵

3.1 通过SimpleMatrix创建一个空矩阵

创建一个2x4的空矩阵matrix(全部为0)。

SimpleMatrix matrix  = new SimpleMatrix(2,4);
System.out.println(matrix);

输出为:

Type = DDRM , rows = 2 , cols = 4
 0.0000E+00  0.0000E+00  0.0000E+00  0.0000E+00 
 0.0000E+00  0.0000E+00  0.0000E+00  0.0000E+00 

3.2 通过SimpleMatrix创建一个空矩阵

double[][] array_2D_double = new double[3][5];
SimpleMatrix matrix_2D_double = new SimpleMatrix(array_2D_double);
System.out.println(matrix_2D_double);

4 SimpleMatrix矩阵运算

4.1 矩阵加减法

矩阵加法:SimpleMaxtrix.plus()
矩阵减法:SimpleMaxtrix.minus()
初始化矩阵A为35,值全为1;矩阵B为35,值全为2。令C=A+B。其中A和B必须为同型矩阵,若不为同型矩阵,则报错Exception in thread “main” org.ejml.MatrixDimensionException: Must be same shape.

SimpleMatrix matrixA = new SimpleMatrix(3, 4);  //创建4x4的矩阵A
SimpleMatrix matrixB = new SimpleMatrix(4, 4);  //创建4x4的矩阵B
matrixA.fill(1); //将A的所有元素设为1
matrixB.fill(2); //将B的所有元素设为2
System.out.println(matrixA);
System.out.println(matrixB);

SimpleMatrix matrixC = matrixA.plus(matrixB);
System.out.println(matrixC);

4.2 矩阵乘法

初始化矩阵A为35,值全为1;矩阵B为35,值全为2。令C=AB,D=BA。注意AB和BA结果不一样。其中矩阵AB能够相乘要满足A的行数=B的列数,否则报错: Exception in thread “main” org.ejml.MatrixDimensionException: 5 != 4 The ‘A’ and ‘B’ matrices do not have compatible dimensions.

		SimpleMatrix matrixA = new SimpleMatrix(5, 3);  //创建4x4的矩阵A
        SimpleMatrix matrixB = new SimpleMatrix(3, 5);  //创建4x4的矩阵B
        matrixA.fill(1); //将A的所有元素设为1
        matrixB.fill(2); //将B的所有元素设为2
        System.out.println(matrixA);
        System.out.println(matrixB);

        SimpleMatrix matrixC = matrixA.mult(matrixB);
        System.out.println(matrixC);

        SimpleMatrix matrixD = matrixB.mult(matrixA);
        System.out.println(matrixD);

4.3 矩阵的数乘

一个标量×一个矩阵=该标量×矩阵中的每一个元素。SimpleMatrix中使用scale()方法实现。

4.4 矩阵+标量(plus)

在线性代数中,只有相同维数的矩阵可以相加,相同维数的向量可以相加,而没有定义矩阵与标量、向量的加法。在numpy中,允许矩阵与标量、向量相加,产生另一个矩阵(广播)。
矩阵+标量:标量与矩阵中的每一个元素相加。(numpy、SimpleMatrix都可实现)
矩阵+向量:向量与矩阵的每一行(或列)相加(numpy广播,SimpleMatrix则不可)。

		//矩阵的数加
		SimpleMatrix matrixB = new SimpleMatrix(3, 5);  //创建4x4的矩阵B
        matrixB.fill(2); //将B的所有元素设为2
        SimpleMatrix matrixF = matrixB.plus(3);
        System.out.println(matrixF);

4.4 矩阵+向量

在numpy中,矩阵可以和向量相加。在SimpleMatrix,若是使用plus()则会报错。运行一下代码会报错:Exception in thread “main” org.ejml.MatrixDimensionException: Must be same shape. 4x4 vs 4x1.

double[] x = ThreadLocalRandom.current().doubles(0, 1).distinct().limit(4).toArray();
SimpleMatrix m = new SimpleMatrix(4, 1, false, x);
System.out.println(m);

SimpleMatrix H = new SimpleMatrix(4, 4);
System.out.println(H.plus(m));

4.4 矩阵对应元素相乘

SimpleMatrix中使用elementMult()方法实现对应元素相乘。

SimpleMatrix A = new SimpleMatrix(2, 4);
SimpleMatrix B = new SimpleMatrix(2, 4);
A.fill(2);
B.fill(3);
System.out.println(A.elementMult(B));

输出

Type = DDRM , rows = 2 , cols = 4
 6.0000E+00  6.0000E+00  6.0000E+00  6.0000E+00 
 6.0000E+00  6.0000E+00  6.0000E+00  6.0000E+00 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值