如何找出Python CSR大型稀疏矩阵中非全零列的索引
找出CSR稀疏矩阵的非全零列索引
对于大型CSR稀疏矩阵,直接转换为稠密数组会占用大量内存,推荐利用CSR矩阵的内部结构高效获取非全零列索引:
- 确保矩阵为CSR格式(如果是其他稀疏格式如DOK,先转换)
- 提取CSR矩阵的
indices数组(存储所有非零元素的列索引) - 对
indices数组取唯一值并排序,得到的就是非全零列的索引列表
示例代码
import scipy.sparse as sparse import numpy as np # 构造示例矩阵 s = sparse.dok_matrix((2,4)) s[0,0] = 8 s[0,3] = 9 # 转换为CSR格式 s_csr = sparse.csr_matrix(s) # 获取非全零列索引 non_zero_col_indices = np.unique(s_csr.indices).tolist() print(non_zero_col_indices) # 输出: [0, 3]
原理说明
CSR矩阵的indices数组记录了每个非零元素对应的列索引,只要某列在indices中出现过,就说明该列存在非零值。通过np.unique()去重并排序,就能得到有序的非全零列索引列表,整个过程无需遍历所有列,内存效率极高,适合处理大型稀疏矩阵。
内容的提问来源于stack exchange,提问作者zell
相关产品推荐
相关产品推荐

