如何为scipy.sparse.csr矩阵添加新列?sklearn TF-IDF矩阵扩展需求
给Scikit-learn生成的稀疏TF-IDF矩阵添加新列的方法
当然可以实现!你现在面对的是CSR格式的稀疏矩阵,要把density这个list作为新列加进去,核心是把list转换成和原矩阵兼容的稀疏格式,再用稀疏矩阵专用的拼接工具合并,具体步骤如下:
第一步:将
density转换为二维稀疏矩阵
因为要作为单列数据,首先得把一维的list转成(1397, 1)形状的二维数组,再转换成和原矩阵一致的CSR格式稀疏矩阵(这样拼接效率最高):import numpy as np from scipy.sparse import csr_matrix, hstack # 把list转成二维数组,reshape(-1,1)会自动匹配现有行数 density_2d = np.array(density).reshape(-1, 1) # 转换成CSR格式的稀疏矩阵 density_sparse = csr_matrix(density_2d)第二步:拼接原矩阵和新列
注意不能直接用NumPy的hstack,必须用Scipy稀疏模块里的hstack来处理稀疏矩阵的拼接操作:# 拼接后会得到一个1397x9577的新稀疏矩阵 new_matrix = hstack([matrix, density_sparse])
关键细节提醒
- 为什么要坚持用稀疏格式拼接?因为原TF-IDF矩阵本身是稀疏的,如果转成密集数组再添加列,很容易占用大量内存(尤其是当矩阵维度更大时),保持稀疏格式能节省内存同时保证运算效率。
- 拼接前一定要确认
density的长度(1397)和原矩阵的行数完全匹配,否则会直接抛出维度不兼容的错误。
内容的提问来源于stack exchange,提问作者Lee Jack
相关产品推荐
相关产品推荐

