尝试读取原始数据。Scipy稀疏矩阵存储在Numpy ndarray中,每个矩阵具有不同的格式。
读取LIL稀疏矩阵的原始数据
%%timeit -n3for i, (row, data) in enumerate(zip(lil.rows, lil.data)): for j, val in zip(row, data): arr[i,j] = val
3 loops, best of 3: 4.61 ms per loop
读取CSR稀疏矩阵的原始数据
对于csr矩阵,从原始数据中读取的Python语言要少一些,但是值得这样做。
csr = lil.tocsr()%%timeit -n3start = 0for i, end in enumerate(csr.indptr[1:]): for j, val in zip(csr.indices[start:end], csr.data[start:end]): arr[i,j] = val start = end
3 loops, best of 3: 8.14 ms per loop
此DBSCAN实现中使用了类似的方法。
读取COO稀疏矩阵的原始数据
%%timeit -n3for i,j,d in zip(coo.row, coo.col, coo.data): arr[i,j] = d
3 loops, best of 3: 5.97 ms per loop
根据这些有限的测试:
- COO矩阵:最干净
- LIL矩阵:最快
- CSR矩阵:最慢和最丑。唯一的好处是,与CSR的转换非常快。
编辑:从@hpaulj,我添加了COO矩阵以将所有方法都放在一个位置。



