如何像NumPy二维数组一样提取Scipy稀疏矩阵的子矩阵?
Scipy稀疏矩阵提取子矩阵的方法
当然可以用类似NumPy的切片语法提取Scipy稀疏矩阵的子矩阵,不过要注意不同稀疏矩阵格式的兼容性:
CSR/CSC格式(最常用):直接支持行、列的切片操作,语法和NumPy几乎一致,即使目标区域和原矩阵的非零块不重合也能正常提取。
示例代码:import scipy.sparse as sp # 创建4x4的CSR稀疏矩阵 sparse_arr = sp.random(4, 4, density=0.5, format='csr') # 提取前2行、后2列的子矩阵 sub_matrix = sparse_arr[0:2, 2:4]切片后得到的子矩阵依然是稀疏格式,只会保留目标区域内的非零元素,零元素不会被存储,完全适配目标区域和非零块不一致的场景。
COO/DOK等其他格式:这类格式不直接支持切片,需要先转换为CSR或CSC格式再操作:
# COO格式转CSR后切片 sparse_arr_coo = sp.random(4, 4, density=0.5, format='coo') sub_matrix = sparse_arr_coo.tocsr()[0:2, 2:4]
内容的提问来源于stack exchange,提问作者Hiranmay Das
相关产品推荐
相关产品推荐

