一、基本功能简介

apache-commons-math3是java的一种科学计算类库,实现科学计算功能的类库其他语言如python、scala都有很多而且很容易找到资料,java可能是由于这方面的需求不多,所以相关的资料较少,在此我就简要介绍一下apache-commons-math3,帮大家大致了解一下这个东西,详细的使用还是需要自己去研究官方文档了。如果想使用其他科学计算包可以参考下面这个网址,其中很详细地介绍了如今市面上常见的科学计算包及其支持的功能。

https://java-matrix.org/

math3支持的的功能如下所示:

  • 支持java5到java8
  • 支持以二维数组的形式存储密集数据
  • 支持大量密集数据的块存储
  • 支持DOK形式的稀疏数据存储(键值对字典)
  • 支持double、BigDecimal、String、Object、Complex Numbers等数据类型
  • 支持二维矩阵
  • 支持常用的矩阵操作、如矩阵转置、矩阵求逆、加减乘除
  • 支持LU和QR分解等

二、向量与矩阵

接下来介绍一下有关向量和矩阵的一些常用的方法

java取消科学计算法 java科学计算包_java


上图描述了math3中向量的几个实数常用接口和类库,最顶端是基础接口类,OpenMapRealVector和ArrayRealVector分别是稀疏向量和稠密向量的实现类,OpenMapRealVector以键值对的形式存储稀疏向量,ArrayRealVector则是以一维数组的形式存储数据,简单示例如下所示:

//构造稀疏向量,维数为7
OpenMapRealVector openMapRealVector=new OpenMapRealVector(7);
//填充稀疏向量
openMapRealVector.setEntry(2,1.0);
openMapRealVector.setEntry(4,1.0);
//输出稀疏向量当前的值
System.out.println("sparse:"+Arrays.toString(openMapRealVector.toArray()));
double[] a=new double[]{0,0.2,0.3,0.4,0,0,0};
//直接以一维数组构造稠密向量
ArrayRealVector arrayRealVector=new ArrayRealVector(a);
System.out.println("dense:"+Arrays.toString(arrayRealVector.toArray()));
OpenMapRealVector realVector=openMapRealVector.append(arrayRealVector);
System.out.println("result:"+Arrays.toString(realVector.toArray()));
String str="0.11,0.222,0.33";
//用RealVector解析字符串,参数分别是字符串的前缀、后缀和分隔符
RealVectorFormat realVectorFormat=new RealVectorFormat("","",",");
ArrayRealVector arrayRealVector1=realVectorFormat.parse(str);
System.out.println(Arrays.toString(arrayRealVector1.toArray()));

输出如下

sparse:[0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0]
dense:[0.0, 0.2, 0.3, 0.4, 0.0, 0.0, 0.0]
result:[0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.2, 0.3, 0.4, 0.0, 0.0, 0.0]
[0.11, 0.222, 0.33]

下面介绍一下math3的矩阵

java取消科学计算法 java科学计算包_java取消科学计算法_02


其中BlockRealMatrix更适合大维度的矩阵,官方文档是这样介绍的

being more suited to dimensions above 50 or 100

关于矩阵math3有一个工具类MatrixUtils,包含了一些常用的矩阵操作,有需要的可以自行查阅math3官方API。

http://commons.apache.org/proper/commons-math/javadocs/api-3.6.1/index.html?overview-summary.html