Scipy稀疏矩阵 - 不同实现的目的和用途

44
Scipy提供了许多不同类型的稀疏矩阵。这些类型之间最重要的区别是什么?它们的预期用途有什么不同?
我正在开发一个基于Matlab样本代码1的Python代码。代码的其中一部分使用了稀疏矩阵,在Matlab中只有一种(令人讨厌)类型,我正试图弄清楚在Python中应该使用哪种类型2
1: 这是一门课程的内容。大多数人使用Matlab完成项目,但我似乎喜欢制造不必要的工作和困惑。
2: 这是一个学术问题:我已经成功地使用“CSR”格式编写了代码,但我对最佳用法很感兴趣。

5
我认为对于大多数线性代数运算而言,CSR或CSC应该是首选选项,因为大多数函数都是针对这些类型构建的。BSR是CSR的块状版本。COO和DOK对于数据输入很方便,但是一旦你把它们全部输入完毕,就会想要将它们转换为其他类型之一。LIL更适合像切片这样的操作。不确定DIA是否非常适合线性代数运算。 - Jaime
1个回答

51

抱歉如果我的回答不够完整,但我希望能提供一些见解。

CSC(压缩稀疏列)和CSR(压缩稀疏行)更加紧凑高效,但难以“从头开始”构建。Coo(坐标)和DOK(键字典)容易构建,并且可以通过matrix.tocsc()matrix.tocsr()转换为CSC或CSR。

CSC通常在访问列向量或列运算时更加高效,因为它将列及其在每行中的值存储为数组。

CSR矩阵则相反;将行及其在每列中的值存储为数组,访问行向量或行运算时更加高效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接