在Python/R中使用稀疏矩阵的利弊?
我正在用Python处理一些很大的稀疏矩阵(这些矩阵是从文本生成的文档-特征矩阵)。处理这些矩阵需要花费不少时间和内存,我想稀疏矩阵可能会带来一些改进。但是,我担心使用稀疏矩阵库会让它更难与其他Python模块(以及通过rpy2与R模块)连接。
有没有已经经历过这个过程的人能给点建议?在性能、可扩展性和兼容性方面,使用Python/R中的稀疏矩阵有什么优缺点?
2 个回答
1
稀疏矩阵有很多种表示方法(比如R的SparseM包就提供了20种不同的存储稀疏矩阵数据的方法),所以要做到和所有解决方案完全兼容几乎是不可能的。选项这么多,也说明没有一种方法适合所有情况。
你可以根据你的计算需求选择使用numpy的稀疏矩阵,或者使用R的SparseM(通过rpy2)。也就是说,如果你的计算主要在numpy里,就用numpy的稀疏矩阵;如果是在R里,就用R的SparseM。
1
在Python中使用稀疏矩阵可能并不是个好主意。你有没有看看numpy / scipy中的稀疏矩阵?
Numpy的一个大优点是它主要使用C语言编写,这样可以让Python的运行速度更快。
根据我在R语言中进行文本处理的有限经验,性能差得让人几乎无法用它来做任何超出探索性数据分析的事情。
不管怎样,你不应该用普通的列表来处理稀疏矩阵,因为这样做会(可以理解地)让处理速度变得很慢。