作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师
近期荣誉:华为云云享专家、阿里云专家博主、腾讯云优秀创作者
三连支持:欢迎 ❤️关注、点赞、收藏三连,支持一下博主~
在网上搜索了下,使用Java做一些简单的数据分析的比较少,大多数都是使用Python和Scala语言引入的内置库或者第三方库。而在Java中的篇幅介绍少之又少,所以也衍生出来了想要写几篇详细的介绍,用来介绍我Java区的数据分析的文章。
Apache Commons是Apache软件基金会的项目,曾隶属于Jakarta项目。Commons的目的是提供可重用的、开源的Java代码。他们都是隶属于Apache 基金会ASF,基金会建立和维护可重用的Java组件,使用组件可以提高开发效率和质量。在Commons项目中,有大家耳熟能详的工具包,比如BeanUtils、Collections、Compress、Crypto、Email、Exec、FileUpload、IO、Lang、Math、Net、Validator等。而今天我要讲解的是Math这个包。
Apache Commons项目的由三部分组成:
● The Commons Proper :一个可重用的Java组件库。(已经发布过的)
● The Commons Sandbox :Java组件开发工作区. (正在开发的项目)
● The Commons Dormant :当前处于非活动状态的组件库.(刚启动或者已经停止维护的项目)
math3可谓是轻量级自容器的数学和统计计算方法类包,包含大多数常用的数值算法。在Apache Commons 项目中,math3是一个数学库,使用原则:
1、真实世界的应用程序用例决定了开发优先级。
2、这个包强调小型、易于集成的组件,而不是具有复杂依赖项和配置的大型库。
3、所有算法都有完整的文档记录,并遵循普遍接受的最佳实践。
4、在存在多种标准算法的情况下,策略模式用于支持多种实现。
5、有限的依赖关系。除了Commons组件和核心Java平台之外,没有外部依赖关系(至少Java1.3到1.2版本的库,至少Java5从2.0版本的库开始)。
目前的稳定版本为commons-math3,测试版本为commons-math4-4.0-beta1,相关下载地址:https://commons.apache.org/math/download_math.cgi
在Maven仓库中,math3版本的从3.0开始,目前最新版本是3.6.1,在官方看到有4.0版本的介绍以及beta版本,后续可能这块还会有发力。
在pom.xml中引入math3包,下面就是我引入的方式,直接拷贝到XML文件中使用maven自动下载导入即可。
<dependency>
<groupId>org.apache.commonsgroupId>
<artifactId>commons-math3artifactId>
<version>3.6.1version>
dependency>
在gradle.xml中引入math3包,下面就是我引入的方式,直接拷贝到XML文件中使用maven自动下载导入即可。
dependencies {
...
// https://mvnrepository.com/artifact/org.apache.commons/commons-math3
implementation group: 'org.apache.commons', name: 'commons-math3', version: '3.6.1'
...
}
在ivy.xml中引入math3包,下面就是我引入的方式,直接拷贝到XML文件中使用maven自动下载导入即可。
...
<dependency org="org.apache.commons" name="commons-math3" rev="3.6.1"/>
...
导入 Apache Commons Math 3 库后 , 就可以使用该库的功能了 , 注意配置了上述依赖后 , 确保网络通常 , Gradle 或 Maven 或 ivy 构建工具会自动从远程 Maven 中央仓库下载对应的依赖库 。当前我是在IDEA中使用Maven导入后的包。
以下是math3的包结构和简单介绍,如果你想了解更多的各个包下的接口和实现,请参考Apache Commons math3 3.6.1 API文档。
math包又分为很多功能子包,例如analysis、stat、distribution、geometry、ml、optim等。
org.apache.commons.math3
org.apache.commons.math3.analysis
org.apache.commons.math3.analysis.differentiation
org.apache.commons.math3.analysis.function
org.apache.commons.math3.analysis.integration
org.apache.commons.math3.analysis.integration.gauss
org.apache.commons.math3.analysis.interpolation
org.apache.commons.math3.analysis.polynomials
org.apache.commons.math3.analysis.solvers
org.apache.commons.math3.complex
org.apache.commons.math3.dfp
org.apache.commons.math3.distribution
org.apache.commons.math3.distribution.fitting
org.apache.commons.math3.exception
org.apache.commons.math3.exception.util
org.apache.commons.math3.filter
org.apache.commons.math3.fitting
org.apache.commons.math3.fitting.leastsquares
org.apache.commons.math3.fraction
org.apache.commons.math3.genetics
org.apache.commons.math3.geometry
org.apache.commons.math3.geometry.enclosing
org.apache.commons.math3.geometry.euclidean.oned
org.apache.commons.math3.geometry.euclidean.threed
org.apache.commons.math3.geometry.euclidean.twod
org.apache.commons.math3.geometry.euclidean.twod.hull
org.apache.commons.math3.geometry.hull
org.apache.commons.math3.geometry.partitioning
org.apache.commons.math3.geometry.partitioning.utilities
org.apache.commons.math3.geometry.spherical.oned
org.apache.commons.math3.geometry.spherical.twod
org.apache.commons.math3.linear
org.apache.commons.math3.ml
org.apache.commons.math3.ml.clustering
org.apache.commons.math3.ml.clustering.evaluation
org.apache.commons.math3.ml.distance
org.apache.commons.math3.ml.neuralnet
org.apache.commons.math3.ml.neuralnet.oned
org.apache.commons.math3.ml.neuralnet.sofm
org.apache.commons.math3.ml.neuralnet.sofm.util
org.apache.commons.math3.ml.neuralnet.twod
org.apache.commons.math3.ml.neuralnet.twod.util
org.apache.commons.math3.ode
org.apache.commons.math3.ode.events
org.apache.commons.math3.ode.nonstiff
org.apache.commons.math3.ode.sampling
org.apache.commons.math3.optim
org.apache.commons.math3.optim.linear
org.apache.commons.math3.optim.nonlinear.scalar
org.apache.commons.math3.optim.nonlinear.scalar.gradient
org.apache.commons.math3.optim.nonlinear.scalar.noderiv
org.apache.commons.math3.optim.nonlinear.vector
org.apache.commons.math3.optim.nonlinear.vector.jacobian
org.apache.commons.math3.optim.univariate
org.apache.commons.math3.optimization
org.apache.commons.math3.optimization.direct
org.apache.commons.math3.optimization.fitting
org.apache.commons.math3.optimization.general
org.apache.commons.math3.optimization.linear
org.apache.commons.math3.optimization.univariate
org.apache.commons.math3.primes
org.apache.commons.math3.random
org.apache.commons.math3.special
org.apache.commons.math3.stat
org.apache.commons.math3.stat.clustering
org.apache.commons.math3.stat.correlation
org.apache.commons.math3.stat.descriptive
org.apache.commons.math3.stat.descriptive.moment
org.apache.commons.math3.stat.descriptive.rank
org.apache.commons.math3.stat.descriptive.summary
org.apache.commons.math3.stat.inference
org.apache.commons.math3.stat.interval
org.apache.commons.math3.stat.ranking
org.apache.commons.math3.stat.regression
org.apache.commons.math3.transform
org.apache.commons.math3.util
distribution包住要有常见离散和连续分布的实现。这个是最常用的一些算法的集合都在这个包,后续的实现也都是在这里。
analysis包用于常见的数值分析过程,包括根查找,功能插补和集成。
complex包主要应用于复杂的数字类型和复杂的超越函数的实现。
fitting是曲线拟合包,他包括最小化观察和模型值之间的残差的算法。
geometry包提供几何算法,包括最小封闭球问题、1D、2D、3D、欧几里德空间中生成一组点的凸壳、凸壳问题、二进制空间分区树、多维排序功能以及几何组件。
看到包名,其实我们应该可以猜测到,虽然没有python那么强大。机器学习算法的基础包,包括集群评估、公共距离计算、神经网络、特征图、一/二维神经网络等。
ODE包主要用于常微分方程问题、非硬常态差分方程问题、离散事件、处理常用方程集成期间处理采样步骤等。
random包包括随机数和随机数据发生器,可以从这里获取一些测试数据。
stat包在基数科学计算中使用比较广泛,主要是一些数据存储,操纵和摘要例程。stat包包括相关性/协方差计算、摘要统计、概要统计(基于时刻、级别以及其他的摘要)、假设测试、二项式、排名等。在后面的博文中会着重介绍。
transform包住要是一些变换方法的实现,包括快速傅里叶变换。
这个我感觉无需多介绍,主要是一些数学统计的工具,可以方便开发者使用。
在math3包中,上面介绍了大体的包结构和子包结构,下面介绍的这些个包我们也不是常用。
● 通用类
通用包主要是整个公共数学库中使用的常见类别
● optimization包
此包在v3.6.1已经全部不建议使用了,所以放在这里。optimization包包括线性、拟合、曲线、最小算法等。
● special包
主要是Beta和Gamma的是使用比较多,其他的两个类很少使用。
本文住要介绍了Commons项目大家族的包,具体介绍了Math包下的架构以及一些子包的分类以及用途。下一篇具体讲解包下类的使用以及注意点。
[引用]
欢迎关注博主 「六月暴雪飞梨花」 或加入【六月暴雪飞梨花社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。