在 python/R 中使用稀疏矩阵的优点和缺点?
我正在 python 中处理大型稀疏矩阵(从文本生成的文档特征矩阵)。仔细研究这些需要花费相当多的处理时间和内存,我想稀疏矩阵可以提供一些改进。但我担心使用稀疏矩阵库会让插入其他 python(以及 R,通过 rpy2)模块变得更加困难。
走过这座桥的人可以提供一些建议吗?在 python/R 中使用稀疏矩阵在性能、可扩展性和兼容性方面有哪些优缺点?
I'm working with large, sparse matrices (document-feature matrices generated from text) in python. It's taking quite a bit of processing time and memory to chew through these, and I imagine that sparse matrices could offer some improvements. But I'm worried that using a sparse matrix library is going to make it harder to plug into other python (and R, through rpy2) modules.
Can people who've crossed this bridge already offer some advice? What are the pros and cons of using sparse matrices in python/R, in terms of performance, scalability, and compatibility?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在 Python 中使用稀疏矩阵本身可能并不是一个好主意。
您是否检查过 numpy / scipy 中的稀疏矩阵?
Numpy 带来了主要使用 C 代码来在 Python 中提供性能提升的巨大好处。
根据我在 R 中进行文本处理的有限经验,其性能使其几乎无法用于探索性数据分析之外的任何用途。
无论如何,您不应该对稀疏矩阵使用普通列表,(可以理解)需要一段时间来仔细研究它们。
Using sparse matrices in Python might not be a great idea in itself.
Have you checked out sparse matrices in numpy / scipy?
Numpy brings the immense benefit of using mainly C code to provide performance gains in Python.
From my limited experience of doing text processing in R, the performance makes it pretty much unusable for anything beyond exploratory data analysis.
Regardless, you shouldn't be using vanilla lists for sparse matrices, it will (understandably) take a while to chew through them.
有多种方法可以表示稀疏矩阵(R SparseM 包的文档报告了 20 种不同的存储稀疏矩阵数据的方法),因此与所有解决方案的完全兼容性可能是不可能的。数字选项还表明,不存在万能的解决方案。
根据在这些矩阵上找到大量数字运算例程的位置(numpy 或 R),选择 numpy 稀疏矩阵或 R 的 SparseM(通过 rpy2)。
There are several ways to represent sparse matrices (documentation for the R SparseM package reports 20 different ways to store sparse matrix data), so complete compatibility with all solutions is probably out of question. The number options also suggests that there is no best-in-all-situations solution.
Pick either the numpy sparse matrices or R's SparseM (through rpy2) according to where your heavy number crunching routines on those matrices are found (numpy or R).