我一直在将 MATLAB 代码移植到 Python 上,经过大量工作后,我有了一些可以工作的东西。然而,缺点是 Python 运行我的代码比 MATLAB 慢。我知道使用优化的 ATLAS 库会加快速度,但实际上实现这一点让我感到困惑。这是发生了什么:
我开始一个没有安装 BLAS 的 ipython 会话:
import numpy.distutils.system_info as sysinfo
import time
In [11]: sysinfo.get_info('atlas')
Out[11]: {}
timeit( eig(randn(1E2,1E2)) )
100 loops, best of 3: 13.4 ms per loop
Matlab 中相同的代码运行速度是原来的两倍
tic,eig(randn(1E2));toc*1000
6.5650
我从 Ubuntu 存储库安装未优化的 ATAS deb。重新启动 ipython,现在我得到:
In [2]: sysinfo.get_info('atlas')
...
Out[2]:
{'define_macros': [('ATLAS_INFO', '"\\"3.8.4\\""')],
'include_dirs': ['/usr/include/atlas'],
'language': 'f77',
'libraries': ['lapack', 'f77blas', 'cblas', 'atlas'],
'library_dirs': ['/usr/lib/atlas-base/atlas', '/usr/lib/atlas-base']}
和测试代码:
In [4]: timeit( eig(randn(1E2,1E2)) )
100 loops, best of 3: 16.8 ms per loop
所以没有更快。如果有什么慢一点。但我还没有切换到优化的 BLAS。我遵循这些说明:http ://danielnouri.org/notes/category/python/我构建库并用这些覆盖非优化版本。我重新启动 ipython 但没有任何变化:
In [4]: timeit( eig(randn(1E2,1E2)) )
100 loops, best of 3: 15.3 ms per loop
难道不能比这更好吗?在这个简单的例子中,MATLAB 的速度仍然是原来的两倍。在我在傅里叶域中进行图像配准的实际示例中,Matlab 等效项比 Python 版本快 4 到 5 倍。有没有人设法让 Numpy 以 MATLAB 的速度工作?