apache-commons-math3简介

来源:互联网 发布:淘宝分销平台免费代理 编辑:程序博客网 时间:2024/06/06 13:13

一、基本功能简介

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分解等

二、向量与矩阵

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

//构造稀疏向量,维数为7OpenMapRealVector 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的矩阵
这里写图片描述
其中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

本篇博客的主要目的是对math3做一个简单地介绍,至于具体的应用还需要自行研究,有什么疑问可以在下方评论区留言,积极交流才能更快地成长~

原创粉丝点击