Numpy 与mkl连接的稀疏矩阵乘法运算
我把numpy和mkl联系起来,我在稀疏矩阵上做矩阵乘法,看起来速度很慢。例如,对于大小为(100000,1000),稀疏密度为0.1,dtype为numpy.float64的矩阵A,我有 timeit A.T.dot(A)给我5.24秒 但是如果我把一个矩阵转换成稠密矩阵,然后进行乘法,我得到了650ms。 blas运算对稀疏矩阵不起作用吗?此外,我还观察到,在执行稀疏乘法时,我的cpu使用情况显示只有一个核在使用,但在密集情况下使用多个核 My numpy.show_config()具有以下配置:Numpy 与mkl连接的稀疏矩阵乘法运算,numpy,scipy,sparse-matrix,intel-mkl,Numpy,Scipy,Sparse Matrix,Intel Mkl,我把numpy和mkl联系起来,我在稀疏矩阵上做矩阵乘法,看起来速度很慢。例如,对于大小为(100000,1000),稀疏密度为0.1,dtype为numpy.float64的矩阵A,我有 timeit A.T.dot(A)给我5.24秒 但是如果我把一个矩阵转换成稠密矩阵,然后进行乘法,我得到了650ms。 blas运算对稀疏矩阵不起作用吗?此外,我还观察到,在执行稀疏乘法时,我的cpu使用情况显示只有一个核在使用,但在密集情况下使用多个核 My numpy.show_config()具有以下
lapack_opt_info:
libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'iomp5', 'pthread']
library_dirs = ['/home/user/miniconda2/envs/sketch/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/home/user/miniconda2/envs/sketch/include']
blas_opt_info:
libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'iomp5', 'pthread']
library_dirs = ['/home/user/miniconda2/envs/sketch/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/home/user/miniconda2/envs/sketch/include']
openblas_lapack_info:
NOT AVAILABLE
lapack_mkl_info:
libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'iomp5', 'pthread']
library_dirs = ['/home/user/miniconda2/envs/sketch/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/home/user/miniconda2/envs/sketch/include']
blas_mkl_info:
libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'iomp5', 'pthread']
library_dirs = ['/home/user/miniconda2/envs/sketch/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/home/user/miniconda2/envs/sketch/include']
关于如何提高numpy在稀疏矩阵上的性能,有什么想法吗。谢谢。什么是数据类型?数据类型是numpy.float64如果在具有形状(583250,76)的数组中有41218703个非零值,为什么要使用稀疏矩阵?您的阵列已满93%!当然,稀疏矩阵乘法要比密集矩阵的密集数组乘法慢。稀疏矩阵使用的数据结构比密集数组使用的简单内存块更复杂,因此需要专门为该数据结构编写的乘法算法。@WarrenWeckesser你说得对。但我认为我有不同的问题,因为即使使用10%的nnz,稀疏矩阵乘法似乎也要慢10倍。此外,我的cpu使用情况显示,稀疏矩阵乘法仅使用一个核心,而密集情况下使用多个核心。我已经用信息更新了我的问题。谢谢,注意numpy对稀疏矩阵一无所知。它们在scipy()中实现。