最近的实验中涉及到了矩阵运算。其中EJML(Efficient Java Matrix Library)是矩阵运算java库。
话不多说,上代码:
下列代码中初始化了一个矩阵。然后,获得每行或者每列的最大最小值。

import org.ejml.data.DenseMatrix64F;
import org.ejml.ops.CommonOps;import java.util.List;public class MatrixHelper {public static void main(String[] args) {DenseMatrix64F L = new DenseMatrix64F(3, 3); // 初始化一个矩阵,并进行下面的赋值L.set(0, 0, 4.0);L.set(0, 1, 13.0);L.set(0, 2, -16.0);L.set(1, 0, 12.0);L.set(1, 1, 37.0);L.set(1, 2, -43.0);L.set(2, 0, -16.0);L.set(2, 1, -43.0);L.set(2, 2, 98.0);System.out.println("data为:");System.out.println(L);DenseMatrix64F mu_0 = getRowMax(L); // 获取行最大值System.out.println("矩阵每一行的最大值为:" + mu_0);DenseMatrix64F mu_1 = getColMax(L); // 获取列最大值System.out.println("矩阵每一列的最大值为:" + mu_1);DenseMatrix64F mu_2 = getRowMin(L); // 获取行最小值System.out.println("矩阵每一行的最小值为:" + mu_2);DenseMatrix64F mu_3 = getColMin(L); // 获取列最小值System.out.println("矩阵每一列的最小值为:" + mu_3);}/*** max of the data row** @param data* @return*/public static DenseMatrix64F getRowMax(DenseMatrix64F data) {if (data.numCols > 1) {// 将矩阵转换为行向量DenseMatrix64F[] dataVectors = new DenseMatrix64F[data.numRows];CommonOps.rowsToVector(data, dataVectors);DenseMatrix64F max = new DenseMatrix64F(dataVectors.length, 1);// initialized to 0for (int i = 0; i < dataVectors.length; i++) {DenseMatrix64F vec = dataVectors[i];max.set(i, CommonOps.elementMax(vec)); // 获取每一行数据的最大值}return max;} else {return data;}}/*** max of the data col** @param data* @return*/public static DenseMatrix64F getColMax(DenseMatrix64F data) {if (data.numRows > 1) {// 将矩阵转换为列向量DenseMatrix64F[] dataVectors = new DenseMatrix64F[data.numCols];CommonOps.columnsToVector(data, dataVectors);DenseMatrix64F max = new DenseMatrix64F(1, dataVectors.length);// initialized to 0for (int i = 0; i < dataVectors.length; i++) {DenseMatrix64F vec = dataVectors[i];max.set(i, CommonOps.elementMax(vec)); // 获取每一列数据的最大值}return max;} else {return data;}}/*** min of the data row** @param data* @return*/public static DenseMatrix64F getRowMin(DenseMatrix64F data) {if (data.numCols > 1) {// 将矩阵转换为行向量DenseMatrix64F[] dataVectors = new DenseMatrix64F[data.numRows];CommonOps.rowsToVector(data, dataVectors);DenseMatrix64F max = new DenseMatrix64F(dataVectors.length, 1);// initialized to 0for (int i = 0; i < dataVectors.length; i++) {DenseMatrix64F vec = dataVectors[i];max.set(i, CommonOps.elementMin(vec)); // 获取每一行数据的最小值}return max;} else {return data;}}/*** min of the data col** @param data* @return*/public static DenseMatrix64F getColMin(DenseMatrix64F data) {// 将矩阵转换为列向量if (data.numRows > 1) {DenseMatrix64F[] dataVectors = new DenseMatrix64F[data.numCols];CommonOps.columnsToVector(data, dataVectors);DenseMatrix64F max = new DenseMatrix64F(1, dataVectors.length);// initialized to 0for (int i = 0; i < dataVectors.length; i++) {DenseMatrix64F vec = dataVectors[i];max.set(i, CommonOps.elementMin(vec)); // 获取每一列数据的最小值}return max;} else {return data;}}/*** min of the data row** @param data* @return*/public static double[] getColMax(List<DenseMatrix64F> data) {if (data.isEmpty()) {return null;}DenseMatrix64F result = new DenseMatrix64F(data.size(), data.get(0).numCols);// 将矩阵转换为行向量for (int i = 0; i < data.size(); i++) {if (data.get(i) != null) {DenseMatrix64F vec = getColMax(data.get(i));for (int j = 0; j < vec.numCols; j++) {result.set(i, j, vec.get(j)); // 获取每一行数据的最小值}}}return getColMax(result).data;}/*** min of the data col** @param data* @return*/public static double[] getColMin(List<DenseMatrix64F> data) {if (data.isEmpty()) {return null;}DenseMatrix64F result = new DenseMatrix64F(data.size(), data.get(0).numCols);// 将矩阵转换为行向量for (int i = 0; i < data.size(); i++) {if (data.get(i) != null) {DenseMatrix64F vec = getColMin(data.get(i));for (int j = 0; j < vec.numCols; j++) {result.set(i, j, vec.get(j)); // 获取每一行数据的最小值}}}return getColMin(result).data;}
}

运行结果:

data为:
Type = dense , numRows = 3 , numCols = 34.000  13.000  -16.000
12.000  37.000  -43.000
-16.000  -43.000  98.000  矩阵每一行的最大值为:Type = dense , numRows = 3 , numCols = 1
13.000
37.000
98.000  矩阵每一列的最大值为:Type = dense , numRows = 1 , numCols = 3
12.000  37.000  98.000  矩阵每一行的最小值为:Type = dense , numRows = 3 , numCols = 1
-16.000
-43.000
-43.000  矩阵每一列的最小值为:Type = dense , numRows = 1 , numCols = 3
-16.000  -43.000  -43.000

Java矩阵计算之EJML相关推荐

  1. Java矩阵计算库UJMP

    前言 Java中矩阵计算库常用的有:ujmp, ejml. 在使用中发现ujmp相对好用些,本文对此进行介绍. UJMP 全称 Universal Java Matrix Package 官网 htt ...

  2. Java 计算包 ejml 、 jblas及Jama 矩阵计算性能比较

    一. 1.Ejml全称为Efficient Java Matrix Library,一款高效的数运算java库,主要是矩阵计算,官网org.ejml. 2.jblas是一个快速的Java线性代数库.它 ...

  3. java 矩阵计算 加减乘除 反转 分解

    矩阵计算 package Jama;import java.text.NumberFormat; import java.text.DecimalFormat; import java.text.De ...

  4. python获取数组中大于某一阈值的那些索引值_java矩阵计算及其在统计中的应用(一)...

    该文介绍了java colt和commons-math3的一些矩阵计算API,并且使用colt库简单实现了基于法方程组法的最小二乘法,结构方程模型的梯度下降参数估计,广义混合效应模型(多层广义线性模型 ...

  5. 机器学习知识点(十九)矩阵特征值分解基础知识及Java实现

    1.特征值分解基础知识 矩阵乘法Y=AB的数学意义在于变换,以其中一个向量A为中心,则B的作用主要是使A发生伸缩或旋转变换.一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相 ...

  6. java智能算法--机器学习包

    参考:https://www.cnblogs.com/jpfss/p/9262907.html 一.科学计算或矩阵运算库 科学计算包: JMathLib是一个用于计算复杂数学表达式并能够图形化显示计算 ...

  7. Java第三方工具库/包汇总

    一.科学计算或矩阵运算库 科学计算包: JMathLib是一个用于计算复杂数学表达式并能够图形化显示计算结果的Java开源类库.它是Matlab.Octave.FreeMat.Scilab的一个克隆, ...

  8. matlab武汉理工大学数值分析线性函数拟合实验_「首席架构师推荐」数值计算库精选...

    这是一个著名的数值库列表,这些库用于软件开发中执行数值计算.它不是一个完整的列表,而是一个包含Wikipedia上文章的数字库列表,很少有例外. 典型库的选择取决于一系列不同的需求,例如:期望的特性( ...

  9. 矩阵的QR分解(jama和emjl对比,UJMP锦上添花)

    一.QR分解法(QR Decomposition) QR分解法是三种将矩阵分解的方式之一.其它两种:Cholesky和LU.QR分解经常用来解线性最小二乘法问题.QR分解也是特定特征值算法即QR算法的 ...

最新文章

  1. 零售连锁专卖信息化解决方案简介之二
  2. java正则表达式课程_通过此免费课程学习正则表达式
  3. tensorflow函数总结
  4. python语言支持苹果系统吗_Mac系统上的一款Python编程平台
  5. java e.getmessage() null_Java e.getMessage 错误信息为null
  6. C++中局部变量可以和全局变量重名吗?
  7. 第五章:创建自定义绑定
  8. .NET如何写正确的“抽奖”——数组乱序算法
  9. java 断点_每个Java开发人员应拥有的持久断点
  10. oracle中execute函数,oracle Execute Immediate(sql语句)
  11. ubuntu 启动图形界面命令_Windows 10 远程连接 Ubuntu 18.04 Server图形界面
  12. python pexpect pxssh scp_Python 的 pexpect 使用 scp 把文本文件传一半就不传了,怎么办?...
  13. Nginx学习之八-惊群问题
  14. Eclipse常用快捷键大全
  15. ea 如何画bce备选架构图_GitHub - wongdean/rime-settings at 941ea079832ff211723bce1ce8e47344e527575e...
  16. php strictbool,PHP 7 Bool类型提示不起作用
  17. Revit中如何绘制轴线?CAD图纸转轴网操作
  18. MGC Group大公司已布局区块链食品供应链技术领域
  19. xcode打包报错Command CodeSign failed with a nonzero exit code的解决方案
  20. CPU/GPU/GPGPU简介

热门文章

  1. Oracle笔记 六、PL/SQL简单语句块、变量定义
  2. Python 键盘鼠标监听
  3. 实习小白::(转) Cocostudio动画编辑器的使用
  4. hdu5185 dp:和为n且满足后一项是前一项或者+1的数列个数
  5. SAS、R以及SPSS的比较__统计语言大战
  6. 漫谈Httpclient
  7. Vim对中文编码的支持[转]
  8. 如何使用日志进行程序调试_如何使用日志节省调试时间
  9. c++语言文件流,C++ IO类、文件输入输出、string流详细讲解
  10. 查缺补漏 | Python控制结构