scipy.sparse.csr_matrix数据异常:存入0、1却出现2值的问题咨询
为什么scipy.sparse.csr_matrix的data会出现原始输入没有的2?
这个问题其实是CSR稀疏矩阵的构建逻辑导致的,我来给你掰扯清楚:
- 首先要明确:当用
csr_matrix创建稀疏矩阵时,如果输入里存在同一个行-列位置(i,j)被多次赋值的情况,CSR会自动把这些位置的数值累加起来,而不是直接覆盖。 - 举个直观的例子,你可以自己跑一下这段代码:
这里同一个(0,0)位置被赋值了两次1,CSR就自动把它们加起来变成了2——这就是你看到“原本不存在的2”的核心原因。from scipy.sparse import csr_matrix indices = [0, 0] # 两个元素都指向第0列 indptr = [0, 2] # 第0行包含2个元素 data = [1, 1] # 给同一个位置传了两次1 mat = csr_matrix((data, indices, indptr), shape=(1,1)) print(mat.data) # 输出会是array([2]) - 反过来,如果你的输入里每个(i,j)位置只出现一次,那data里就只会保留原始的0和1,不会出现额外的数值。
另外补充个小细节:如果你的data里有0,CSR矩阵在默认构建逻辑下会自动过滤掉0值条目(毕竟稀疏矩阵的意义就是只存非零值)。但如果是重复位置的0累加,结果还是0,同样会被过滤,所以你一般看不到data里有0(除非特意设置keep_zero=True参数)。
总结一下:出现2不是存储错误,是CSR矩阵对重复坐标位置的数值做了累加处理,属于它的默认行为哦。
内容的提问来源于stack exchange,提问作者StatsSorceress
相关产品推荐
相关产品推荐

