大多数高级编程语言中的统计包和库是否依赖 LAPACK 进行矩阵求逆运算?

计算科学 线性代数 Python 拉帕克 矩阵分解
2021-12-06 12:47:28

可能是一个开放式问题,但我想知道大多数统计包和库,例如 Stata、R、Python 的 NumPy 和 MATLAB 是否依赖 LAPACK 算法来执行矩阵运算,包括反转矩阵。

1个回答

tl;博士是的。

但是您的问题并没有明确说明您了解 LAPACK 的含义。LAPACK 既是一个软件,也是一个接口。也就是说,LAPACK 定义的操作足够标准,可以被其他软件替代,例如ATLASMKL等。另一种看待这一点的方式是,任何执行线性代数的软件都隐含地使用 LAPACK 式接口。鉴于此,您可能还会问您命名的每种语言/工具如何实例化此接口。

Python

说明

NumPy 不需要安装任何外部线性代数库。但是,如果这些可用,NumPy 的设置脚本可以检测到它们并将它们用于构建。可以使用许多不同的 LAPACK 库设置,包括优化的 LAPACK 库,例如 ATLAS、MKL 或 OS X 上的 Accelerate/vecLib 框架。 [链接]

如何查看您的配置np.show_config()

R

说明

从 CRAN 下载的预编译 R 发行版使用参考 BLAS/LAPACK 实现进行线性代数运算,这些实现被构建为稳定且跨平台兼容,但未针对性能进行优化。大多数 R 程序员使用这些默认库并且不知道高度优化的库 [带有 BLAS/LAPACK 接口] 可用,切换到这些库可以显着提高性能。[链接]

如何查看您的配置sessionInfo()

Matlab(但为什么?)

说明

2000 年,MATLAB 迁移到使用 LAPACK,它是 LINPACK 和 EISPACK 的现代替代品。它是一个用于数值线性代数的大型、多作者、Fortran 库。LAPACK 最初旨在用于超级计算机,因为它能够一次对矩阵的多个列进行操作。LAPACK 例程的速度与基本线性代数子例程 (BLAS) 的速度密切相关。BLAS 版本通常是特定于硬件且高度优化的。[链接]

另一个说明

三个版本分别是:

当前(蓝色):MATLAB 5.3 版中包含的数值库

参考(绿色):基于 LAPACK 和与机器无关的 Fortran 参考 BLAS 的新数值库

优化(红色):基于 LAPACK 和 BLAS 的新数字库,针对每台特定计算机进行了优化。

[链接]

如何查看您的配置version -lapack

斯塔塔

谁知道?我建议使用 R。