微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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格式的索引实际上是通过特殊构造的“提取器”矩阵使用矩阵乘法的。

在所有稀疏索引生成稀疏矩阵的情况下,实际上从数据构造新矩阵都需要时间。稀疏使用的编译代码几乎不及numpy。与numpy相比,它的强项是稀疏10%(或更小)的矩阵的矩阵乘法。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。