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 
使用Java实现矩阵运算,可以使用数组来表示矩阵,并编写相应的函数来实现不同的运算。以下是一个简单的示例代码,展示了如何实现矩阵的加法、减法和乘法运算: ```java public class MatrixOperations { public static void main(String[] args) { double[][] matrixA = { {1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, 1.0, 1.0} }; double[][] matrixB = { {2.0, 2.0, 2.0}, {2.0, 2.0, 2.0}, {2.0, 2.0, 2.0} }; double[][] result = addMatrices(matrixA, matrixB); printMatrix(result); result = subtractMatrices(matrixA, matrixB); printMatrix(result); result = multiplyMatrices(matrixA, matrixB); printMatrix(result); } public static double[][] addMatrices(double[][] matrixA, double[][] matrixB) { int rows = matrixA.length; int cols = matrixA = matrixA[i][j + matrixB[i][j]; } } return result; } public static double[][] subtractMatrices(double[][] matrixA, double[][] matrixB) { int rows = matrixA.length; int cols = matrixA = matrixA[i][j - matrixB[i][j]; } } return result; } public static double[][] multiplyMatrices(double[][] matrixA, double[][] matrixB) { int rowsA = matrixA.length; int colsA = matrixA += matrixA[i][k * matrixB[k][j]; } } } return result; } public static void printMatrix(double[][] matrix) { int rows = matrix.length; int cols = matrix + " "); } System.out.println(); } System.out.println(); } } ``` 上述代码中,`addMatrices`函数实现了矩阵的加法运算,`subtractMatrices`函数实现了矩阵的减法运算,`multiplyMatrices`函数实现了矩阵的乘法运算。`printMatrix`函数用于打印矩阵。 你可以根据需要修改矩阵的大小和内容,并调用相应的函数来执行不同的矩阵运算。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [用Java实现矩阵的基本运算(矩阵与数字相加,矩阵矩阵相加,矩阵矩阵相乘,矩阵与数字相乘)附有详细代码...](https://blog.csdn.net/m0_58941767/article/details/121137711)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值