让你的python和R矩阵运算提速10-100倍

使用python和R进行科学计算,最为人所诟病的是它们的运算速度。然而,通过关联Intel MKL线性代数库,你可以使python和R达到和matlab类似的运算速度,并且自动使用闲置CPU核心进行并行。

Python和R是一种解释性语言,因此直接调用python和R中的循环进行矩阵运算的速度是不能接受的。进阶技巧是使用如Python的numpy包和R中的Matrix包等进行向量化运算。这些向量化运算的底层实现使用基于Fortran的线性代数包BLAS和LAPACK,因此速度数百倍快于循环运算。

然而,对于大型矩阵运算,如数千乃至数万维矩阵乘法,求逆运算等,即使向量化后依然需要很长的计算时间。查阅numpy手册和R的矩阵运算手册,我们可以发现对于大多数用户,这些科学计算并不依赖于系统中安装的底层线性代数包(通常个人电脑中也不会安装这些包),而是在源码中整合配置了OpenBLAS作为默认的运算包。这样的好处是可以一键pip安装numpy(R甚至不需要安装),而劣势是这些运算包并没有发挥CPU的最大性能。

对于使用了Intel CPU的设备而言,使用Intel MKL包(Math Kernel Library)是一种好选择。我们可能听说过Matlab在矩阵运算上很有优势,然而,这种优势部分基于其内部集成了MKL包。通过将Python和R与MKL关联,我们可以实现与Matlab类似的矩阵运算速度,摆脱慢速的刻板印象。

只需两步,实现关联MKL和python或R。

第一步:在电脑上安装MKL:

Intel® oneAPI Base Toolkits (Intel® oneAPI Toolkits)集成了Intel® oneAPI Math Kernel Library,可在上述网址找到适合自己系统的安装版本。对于windows系统,其安装文档见(Intel® oneAPI Toolkits Installation Guide for Windows*)。值得注意的是,windows系统上的安装需要先安装Visual Studio,以及在Visual studio中配置好“使用C++的桌面开发”所需的组件。其它的步骤只需跟随安装软件指引即可。

第二步:关联Python或R

对于python中numpy,scipy等的关联,可以使用Anaconda安装并管理Intel发行的python版本,安装方式参考(Installing Intel® Distribution for Python* and Intel® Performance...)。此外,亦可以手动配置numpy和scipy所用的底层科学计算包,参考(Numpy/Scipy with Intel® MKL and Intel® Compilers)。这里更推荐使用Anaconda直接安装所需版本的python,便于版本管理。

对于R的关联,同样有两种途径。第一种方法,下载由微软发行的Microsoft R Open(Home),可以一键傻瓜式安装,同时默认配置MKL的多进程模式。唯一值得注意的是,微软R默认的CRAN镜像较老,更新也不及时,建议安装之后在Rstudio中改为自己常用的镜像网址,如在Tools->Global options->Packages中改为The Comprehensive R Archive Network。此外,也可以参考(Using oneMKL with R)中的介绍手动配置R调用的科学计算包。

最后,我们可以进行简单的矩阵运算验证效果。以R为例,链接MKL之前的矩阵运算%*%只会调用一个核心,链接之后会默认使用闲置核心,最大化CPU效率。可以认为,现在使用numpy和R的矩阵运算效率能够达到Matlab中的水平。

做中文互联网中简洁开放的技术分享,欢迎转载(转载需注明作者)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值