BLAS/ARPACK/LAPACK

来源:互联网 发布:mac用什么压缩软件 编辑:程序博客网 时间:2024/05/19 17:22

来自wiki ARPACK  LAPACK BLAS

         

           首先,spark里面有个机器学习的库MLlib,MLlib里面有个线性代数包linalg,linalg里面主要实现了稠密矩阵,向量,还有三种分布式矩阵,我们主要用到的就是这个linalg包下面的SVD分解和PCA。观察源代码,发现linalg里面引用了Breeze库。Breeze是什么呢?就看本博客的第一篇文章。简单的说Breeze是用scala语言实现的数值运算库,里面有linalg这种线性运算包,可以进行矩阵,甚至是张量运算。Breeze又隶属于ScalaNLP 工程。ScalaNLP又是什么呢?这就扯远了。。。主要是Breeze又基于netlib-java和 jblas.然后呢,netlib-java jblas.是对BLAS,LAPACK,ARPACK这些Fortran子库的低层次包装。SVD分解主要依赖Fortran库里面的ARPACK。所以spark的所有结点都必须安装gfortran runtime library。

       挖掘线路是这样的spark ->MLlib->linalg->Breeze->netlib-java jblas->ARPACK.

       据说matlab是这样封装的。Matlab ->java界面->中间C++包装->底层计算调用LAPACK,BLAS (它们也是fortran数值计算库)。

       ARPACK,是ARnoldi PACKage的简称,是用Fortran 77编写的数值计算软件库,针对大规模稀疏矩阵或者structured的矩阵,求部分的特征值以及对应的特征向量的。可以用Implicitly Restarted Arnoldi Method (IRAM)方法。当矩阵是对称矩阵时,就采用Lanczos算法。它被用于许多有名的数值计算环境,比如说:SciPy , GNU Octave and MATLAB。ARPACK的强大之处在于可以用任何存储格式的矩阵,因为它不直接对矩阵进行计算,而且最终将这些复杂运算都化成了矩阵与向量相乘。

       LAPACK,是Linear Algebra Package的简称,是一个标准的数值计算软件库。开始时同ARPACK一样用Fortran 77编写,后来又移到了Fortran 90.支持dense 和sparse矩阵,现在它扩展到分布式的PARPACK,ScalaPack.

       BLAS,是Basic Linear Algebra Subprograms的缩写。是一些普通线性代数运算的低层子程序集。后来被用做高级数学编程比如: LINPACKLAPACKMATLAB,Mathematica, NumPyand R.的库


    

    

 

0 0
原创粉丝点击