我正在尝试选择要在我的算法中使用的最佳 scipy 稀疏矩阵类型。在那,我应该以 vij 方式初始化数据,然后我应该用它来执行矩阵向量乘法。最终我必须添加行和列。试图为我的问题选择最好的,我想了解使用每种类型的最佳情况:lil_matrix、coo_matrix、csr_matrix、csc_matrix、dok_matrix。有人可以解释一下吗?没有必要在同一个答案中显示所有类型的示例。
了解 scipy 稀疏矩阵类型
数据挖掘
Python
scipy
2021-10-01 06:26:34
2个回答
好的,我一直在寻找答案,现在我更清楚了:Scipy 文档没有详细说明解释,但维基百科的文章更加清晰。对于那些正在寻找答案的人,有两大类稀疏矩阵:
a) 用于构造矩阵的稀疏类型:
DOK (Dictionary Of Keys):将(行、列)映射到元素值的字典。它使用哈希表,因此设置元素很有效。
LIL(列表列表):LIL 每行存储一个列表。lil_matrix 格式是基于行的,所以如果我们想在其他操作中使用它,转换为 CSR 是有效的,而转换为 CSC 则不太有效。
COO(COOrdinate list):存储(行、列、值)元组的列表。
b) 支持高效访问、算术运算、列或行切片以及矩阵向量乘积的稀疏类型:
CSR(压缩稀疏行):类似于 COO,但压缩行索引。以从左到右从上到下(“行优先”)的顺序保存 M 的所有非零条目(第一行中的所有元素,第二行中的所有元素,依此类推)。行索引和行切片效率更高,因为同一行中的元素连续存储在内存中。
CSC(压缩稀疏列):与 CSR 类似,只是首先按列读取值。在列索引和列切片中更有效。
使用 a) 类型之一构建矩阵后,要执行乘法或求逆等操作,我们应该将矩阵转换为 CSC 或 CSR 格式。
如果您希望一个易于理解的实现有机会使矩阵更大并且能够进行行/列操作,我建议您coo_matrix。coo_matrix 构造起来高效且快速,但算术运算在此矩阵上效率不高。相反,您可以轻松地将 coo_matrix 转换为在column_slicing/row_slicing中有效的 csc_matrix/csr_matrix,这样您就可以进行高效的乘法或求逆。
其它你可能感兴趣的问题