【发布时间】:2017-02-28 13:03:21
【问题描述】:
我使用的格式是csr稀疏矩阵,推荐加点和点运算符最快的稀疏结构。我将它的性能与 np.array 的加法和点运算符进行了比较。但是,稀疏矩阵的计算比密集格式下的情况慢得多,这似乎很奇怪。为什么?有没有更高效的方法来实现稀疏计算?
import numpy as np
import scipy.sparse as sp
import random
#%% generate dense vector
vector_length = 10000
nonzero_term = 200
x = np.zeros((vector_length, ))
y = np.zeros((vector_length, ))
index = random.sample(range(vector_length), nonzero_term)
x[index] = np.random.rand(nonzero_term)
index = random.sample(range(vector_length), nonzero_term)
y[index] = np.random.rand(nonzero_term)
#%% transform to sparse vector
x_sp = sp.csr_matrix(x)
y_sp = sp.csr_matrix(y)
#%% test
# dense add
%timeit [x + y]
# sparse add
%timeit [x_sp + y_sp]
# dense dot
%timeit [x.dot(y)]
# sparse dot
%timeit [x_sp.dot(y_sp.T)]
结果显示
100000 loops, best of 3: 6.06 µs per loop
10000 loops, best of 3: 97.8 µs per loop
100000 loops, best of 3: 3.45 µs per loop
1000 loops, best of 3: 225 µs per loop
【问题讨论】:
标签: python performance numpy scipy sparse-matrix