我在python(numpy)中有一个简单的矩阵乘法代码
import numpy as np
import time
a = np.random.random((70000,3000));
b = np.random.random((3000,100));
t1=time.time()
c = np.dot(a,b);
t2=time.time()
print 'Time passed is %2.2f seconds' %(t2-t1
在一个核心上完成乘法( c = np.dot(a,b); )大约需要16秒。但是当我在Matab上运行相同的乘法时,它需要大约1秒钟(6个核心)才能完成乘法。
那么,为什么Matlab比矩阵乘法的numpy快2.6倍? (每个核心的性能对我来说很重要)
UPDATE 这次我使用Eigen做了同样的事情。它的性能略优于Matlab。 Eigen使用与Numpy使用相同的Blas实现。所以Blas的实现并不是性能缺陷的根源。
要确保已安装的numpy使用BLAS,我np.show_config()
enter code here
blas_info:
libraries = ['blas']
library_dirs = ['/usr/lib64']
language = f77
lapack_info:
libraries = ['lapack']
library_dirs = ['/usr/lib64']
language = f77
atlas_threads_info:
NOT AVAILABLE
blas_opt_info:
libraries = ['blas']
library_dirs = ['/usr/lib64']
language = f77
define_macros = [('NO_ATLAS_INFO', 1)]
atlas_blas_threads_info:
NOT AVAILABLE
lapack_opt_info:
libraries = ['lapack', 'blas']
library_dirs = ['/usr/lib64']
language = f77
define_macros = [('NO_ATLAS_INFO', 1)]
atlas_info:
NOT AVAILABLE
lapack_mkl_info:
NOT AVAILABLE
blas_mkl_info:
NOT AVAILABLE
atlas_blas_info:
NOT AVAILABLE
mkl_info:
NOT AVAILABLE
答案 0 :(得分:6)
试用Enthought Python Distribution。例如,它与Intel Math Kernel Library链接,后者经过高度优化并由MatLab使用。
编辑:2017年的更新。Anaconda distribution现在真的是最好的方式。