首页 > 解决方案 > 矩阵乘法:保持 scipy.sparse.dok_matrix 格式

问题描述

我正在尝试使用 scipy 以 dok(键字典)格式执行稀疏线性代数计算。当我将两个矩阵相乘时,格式从 dok 类型变为 csr 格式,这对于数据和后续操作来说是一种低效的格式。

如何保持 dok 格式?

我看过文档:

但看不到任何信息自动类型转换或是否以及如何避免。

看这个例子:

from scipy.sparse import dok_matrix

my_mat = dok_matrix([[1,2], [3,4]])

print(type(my_mat.dot(my_mat)))
print(type(my_mat @ my_mat))

显示格式已更改:

<class 'scipy.sparse.csr.csr_matrix'>
<class 'scipy.sparse.csr.csr_matrix'>

标签: pythonnumpyscipysparse-matrixlinear-algebra

解决方案


只需转换回来:

result = result.todok()

CSR 对于后续操作可能是一种低效的格式(或者可能不是,我们无法判断),但它对于矩阵乘法非常有用。尝试使矩阵乘法代码在本机上对 DOK 结果进行操作会比仅转换结果要慢。


推荐阅读