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

Python Scipy稀疏矩阵-不同实现的目的和用法,python,matrix,scipy,sparse-matrix,Python,Matrix,Scipy,Sparse Matrix,西皮有。这些类型之间最重要的区别是什么?它们的预期用途有什么区别 我正在基于Matlab中的示例代码1开发python代码。代码的一部分使用了稀疏矩阵——在Matlab中它似乎只有一种(令人讨厌的)类型,我正试图找出我应该在python中使用哪种类型2 1:这是一节课。大多数人都在用Matlab做这个项目,但我喜欢制造不必要的工作和混乱——显然 2:这是一个学术问题:我的代码可以正常使用“”格式,但我很想知道最佳用法是什么。如果我回答得不够完整,很抱歉,但希望我能提供一些见解 CSC(Comp

西皮有。这些类型之间最重要的区别是什么?它们的预期用途有什么区别

我正在基于Matlab中的示例代码1开发python代码。代码的一部分使用了稀疏矩阵——在Matlab中它似乎只有一种(令人讨厌的)类型,我正试图找出我应该在python中使用哪种类型2


1:这是一节课。大多数人都在用Matlab做这个项目,但我喜欢制造不必要的工作和混乱——显然


2:这是一个学术问题:我的代码可以正常使用“”格式,但我很想知道最佳用法是什么。

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

CSC(Compressed Sparse Column)和CSR(Compressed Sparse Row)更紧凑、更高效,但很难“从头开始”构造。Coo(坐标)和DOK(键字典)更容易构造,然后可以通过
matrix.tocsc()
matrix.tocsr()
转换为CSC或CSR

通常,CSC在访问列向量或列操作时更有效,因为它存储为列的数组及其在每行的值


CSR矩阵则相反;存储为行数组及其在每列的值,在访问行向量或行操作时效率更高。

我认为对于大多数线性代数操作,CSR或CSC应该是您的首选选项,因为大多数函数都是为这些类型构建的。BSR是CSR的块版本。COO和DOK对于数据输入来说很方便,但一旦您输入了所有数据,您就需要将其转换为其他类型之一。LIL对切片之类的事情有更好的支持。不确定DIA是否适合线性代数运算。