作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师
近期荣誉:华为云云享专家、阿里云专家博主、腾讯云优秀创作者
三连支持:欢迎 ❤️关注、点赞、收藏三连,支持一下博主~

文章目录

  • 背景介绍
  • 如何使用math
    • math使用原则
    • Maven中引入
    • Gradle中引入
    • ivy中引入
    • 导入后架构
  • math应用实践
    • 01 了解math3包架构
    • 02 math3库distribution包
    • 03 math3库analysis包
    • 04 math3库complex包
    • 05 math3库exception包
    • 06 math3库filter包
    • 07 math3库fitting包
    • 08 math3库fraction包
    • 09 math3库genetics包
    • 10 math3库geometry包
    • 11 math3库linear包
    • 12 math3库ml包
    • 13 math3库ode包
    • 14 math3库optim包
    • 15 math3库primes包
    • 16 math3库random包
    • 17 math3库stat包
    • 18 math3库transform包
    • 19 math3库util包
    • 其他不常用的类、包
  • 总结

在网上搜索了下,使用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 :当前处于非活动状态的组件库.(刚启动或者已经停止维护的项目)

如何使用math

math使用原则

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版本,后续可能这块还会有发力。

Maven中引入

在pom.xml中引入math3包,下面就是我引入的方式,直接拷贝到XML文件中使用maven自动下载导入即可。

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-math3</artifactId><version>3.6.1</version></dependency>

Gradle中引入

在gradle.xml中引入math3包,下面就是我引入的方式,直接拷贝到XML文件中使用maven自动下载导入即可。

dependencies {...// https://mvnrepository.com/artifact/org.apache.commons/commons-math3implementation group: 'org.apache.commons', name: 'commons-math3', version: '3.6.1'...}

ivy中引入

在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导入后的包。

math应用实践

01 了解math3包架构

以下是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

02 math3库distribution包

distribution包住要有常见离散和连续分布的实现。这个是最常用的一些算法的集合都在这个包,后续的实现也都是在这里。

03 math3库analysis包

analysis包用于常见的数值分析过程,包括根查找,功能插补和集成。

04 math3库complex包

complex包主要应用于复杂的数字类型和复杂的超越函数的实现。

05 math3库exception包

这个包就比较好理解了,都是存放的一些错误算法处理类。

06 math3库filter包

filter包也是很常用的一个过滤器。

07 math3库fitting包

fitting是曲线拟合包,他包括最小化观察和模型值之间的残差的算法。

08 math3库fraction包

fraction包主要是分数号类型和分数号格式。

09 math3库genetics包

提供遗传算法组件和实现。

10 math3库geometry包

geometry包提供几何算法,包括最小封闭球问题、1D、2D、3D、欧几里德空间中生成一组点的凸壳、凸壳问题、二进制空间分区树、多维排序功能以及几何组件。

11 math3库linear包

提供线性代数

12 math3库ml包

看到包名,其实我们应该可以猜测到,虽然没有python那么强大。机器学习算法的基础包,包括集群评估、公共距离计算、神经网络、特征图、一/二维神经网络等。

13 math3库ode包

ODE包主要用于常微分方程问题、非硬常态差分方程问题、离散事件、处理常用方程集成期间处理采样步骤等。

14 math3库optim包

optim主要是优化器、最大值、最小值问题。

15 math3库primes包

primes包包括素数相关的方法,如原始测试,因子分解。

16 math3库random包

random包包括随机数和随机数据发生器,可以从这里获取一些测试数据。

17 math3库stat包

stat包在基数科学计算中使用比较广泛,主要是一些数据存储,操纵和摘要例程。stat包包括相关性/协方差计算、摘要统计、概要统计(基于时刻、级别以及其他的摘要)、假设测试、二项式、排名等。在后面的博文中会着重介绍。

18 math3库transform包

transform包住要是一些变换方法的实现,包括快速傅里叶变换。

19 math3库util包

这个我感觉无需多介绍,主要是一些数学统计的工具,可以方便开发者使用。

其他不常用的类、包

在math3包中,上面介绍了大体的包结构和子包结构,下面介绍的这些个包我们也不是常用。
● 通用类
通用包主要是整个公共数学库中使用的常见类别

● 十进制浮点

● optimization包
此包在v3.6.1已经全部不建议使用了,所以放在这里。optimization包包括线性、拟合、曲线、最小算法等。

● special包
主要是Beta和Gamma的是使用比较多,其他的两个类很少使用。

总结

本文住要介绍了Commons项目大家族的包,具体介绍了Math包下的架构以及一些子包的分类以及用途。下一篇具体讲解包下类的使用以及注意点。


[引用]

  1. Commons官方主页:https://commons.apache.org/
  2. ASF官方项目主页:https://www.apache.org/index.html#projects-list
  3. math3 APIs:https://commons.apache.org/proper/commons-math/javadocs/api-3.6.1/index.html

欢迎关注博主 「六月暴雪飞梨花」 或加入【六月暴雪飞梨花社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。