繁体   English   中英

python中的密集矩阵与稀疏矩阵

[英]dense matrix vs sparse matrix in python

我在 python 中比较一行矩阵的读取时间,首先以密集格式然后以稀疏格式获取。

从密集矩阵中“提取”一行大约需要 3.6e-05 秒

对于稀疏格式,我尝试了 csr_mtrix 和 lil_matrix,但两者的行读取都花费了大约 1-e04 秒

我希望稀疏格式能够提供最佳性能,谁能帮我理解这一点?

arr[i,:]用于密集数组生成view ,因此其执行时间与arr.shape 如果您不了解viewcopy之间的区别,则需要多阅读有关numpy基础知识的内容。

csrlil格式允许索引看起来很像ndarray's ,但存在关键差异。 在大多数情况下, view的概念并不适用。 有一个例外。 M.getrowview(i)利用lil的独特数据结构来生成view (阅读它的文档和代码)

csr格式的某些索引实际上使用矩阵乘法,使用特殊构造的“提取器”矩阵。

在稀疏索引产生稀疏矩阵的所有情况下,实际从数据构建新矩阵需要时间。 Sparse 几乎不像numpy那样使用编译代码。 相对于numpy ,它的强项是 10% 稀疏(或更小)矩阵的矩阵乘法。

在最简单的格式(理解)中, coo ,每个非零元素由 3 个值表示 - 数据、行、列。 这些存储在 3 个一维数组中。 因此,它必须具有小于 30% 的稀疏性才能在内存使用方面达到收支平衡。 coo没有实现索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM