In [269]: from scipy import sparse
In [270]: M=sparse.random(1000,1000,.1, 'csr')
In [271]: MA = M.A
In [272]: timeit M*M.T
10 loops, best of 3: 64 ms per loop
In [273]: timeit MA@MA.T
10 loops, best of 3: 60.4 ms per loop
In [282]: (M*M.T)
Out[282]:
<1000x1000 sparse matrix of type '<class 'numpy.float64'>'
with 999964 stored elements in Compressed Sparse Row format>
稀疏的时代在很大程度上依赖于稀疏性,而密集的时代则完全不依赖于稀疏性
In [295]: M=sparse.random(1000,1000,.01, 'csr'); MA=M.A
In [296]: timeit M*M.T
100 loops, best of 3: 2.44 ms per loop
In [297]: timeit MA@MA.T
10 loops, best of 3: 56.3 ms per loop
In [298]: M=sparse.random(1000,1000,.2, 'csr'); MA=M.A
In [299]: timeit M*M.T
10 loops, best of 3: 175 ms per loop
In [300]: timeit MA@MA.T
10 loops, best of 3: 56.3 ms per loop
有了一个往返的稀疏和返回,时间从60秒跳到100毫秒
In [302]: %%timeit
...: M1=sparse.csr_matrix(MA)
...: (M1*M1.T).A
...:
10 loops, best of 3: 104 ms per loop
我定义了一个随机稀疏矩阵,具有指定的稀疏度,10%:
^{pr2}$@
是dot
的运算符形式(请参见np.matmul
)。因此,在这个10%的稀疏度水平上,这两种方法的时间是相同的(没有任何与稀疏的转换)。在对于这个随机矩阵,
M*M.T
结果是密集的:稀疏的时代在很大程度上依赖于稀疏性,而密集的时代则完全不依赖于稀疏性
有了一个往返的稀疏和返回,时间从60秒跳到100毫秒
相关问题 更多 >
编程相关推荐