Numpy/Python表演与Matlab相比

iam*_*pat 4 python matlab numpy

我在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
Run Code Online (Sandbox Code Playgroud)

在一个核心上完成乘法(c = np.dot(a,b);)需要大约16秒.但是当我在Matab上运行相同的乘法时,它需要大约1秒(6个核心)来完成乘法.

那么,为什么Matlab比矩阵乘法的numpy快2.6倍?(每个核心的性能对我来说很重要)

更新我这次使用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
Run Code Online (Sandbox Code Playgroud)

Gou*_*eau 6

试试Enthought Python Distribution.例如,它与英特尔数学核心库相关联,该经过高度优化并由MatLab使用.

编辑:2017年的更新.这些天Anaconda发行版真的是最好的方式.