在Scipy稀疏矩阵中处理范围

4 投票
1 回答
725 浏览
提问于 2025-04-16 11:09

我有一个很大的矩阵,现在是用numpy做的,但我想把它转换成scipy的稀疏矩阵,因为保存这个2000x2000的numpy矩阵的文本表示超过了100MB。

(1) 在scipy中有很多种稀疏矩阵可供选择,比如lil_matrixdok_matrix,那么哪种更适合简单的增量操作,并且在保存到数据库时更高效呢?

(2) 我希望能像这样访问矩阵中的某些范围:

>> import numpy as np    
>> a = np.zeros((1000,1000))
>> a[3:5,4:7] += 1

看起来稀疏矩阵好像不支持这样做?

1 个回答

6

我不能确定哪种存储方式最有效,这要看你的数据类型。

不过我可以告诉你,+=这个操作符是可以用的,只是你不能像平常那样依赖数组的广播规则:

>>> m = sparse.lil_matrix((100,100))
>>> m[50:56,50:56]+=scipy.ones((6,6))
>>> m[50,50]  #1.0

撰写回答