You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python 3.6.4读取CountVectorizer生成的CSV稀疏矩阵?

读取CSV中存储的稀疏矩阵(Python 3.6.4)

从你的代码片段来看,你是把CountVectorizer生成的二进制存在型特征向量逐行写入了CSV文件。需要注意的是:CountVectorizer的输出是scipy.sparse.csr_matrix类型的稀疏矩阵,但直接用csv.writer写入时,实际上是把稀疏矩阵转成了密集的数值数组存储(毕竟CSV是密集表格格式)。下面给你两种实用的读取方案:

方案1:用Pandas快速读取并转稀疏矩阵

这是最省心的方式,Pandas可以直接解析CSV,再转换成scipy稀疏矩阵来节省内存(毕竟你的特征是binary类型,大部分值为0,稀疏矩阵能大幅减少内存占用):

import pandas as pd
from scipy.sparse import csr_matrix

# 读取CSV,注意设置header=None,因为你的文件没有表头
df = pd.read_csv(r'''C:\Users\User\Desktop\csmp3\presence-dataset-training-stemmed.csv''', header=None)

# 将DataFrame转换为CSR稀疏矩阵
sparse_matrix = csr_matrix(df.values)

# 验证结果:查看矩阵形状和非零元素情况
print(f"稀疏矩阵形状: {sparse_matrix.shape}")
print(f"前3行的非零元素总数: {sparse_matrix[:3].nnz}")

方案2:用内置csv模块手动构建稀疏矩阵

如果不想依赖Pandas,用Python自带的csv模块也能实现,步骤是先读取每行数据,再转成numpy数组,最后构建稀疏矩阵:

import csv
import numpy as np
from scipy.sparse import csr_matrix

# 读取所有行数据
feature_rows = []
with open(r'''C:\Users\User\Desktop\csmp3\presence-dataset-training-stemmed.csv''', "r") as csv_file:
    reader = csv.reader(csv_file, delimiter=',')
    for row in reader:
        # 将字符串类型的特征值转为整数(binary特征只有0和1)
        feature_rows.append([int(val) for val in row])

# 转成密集数组后再构建稀疏矩阵
dense_array = np.array(feature_rows)
sparse_matrix = csr_matrix(dense_array)

# 打印稀疏矩阵的基本信息
print(sparse_matrix)

额外提示

  • 确认你的CSV文件没有表头:从你的写入代码来看,你是直接写的特征向量,没有表头行,所以读取时一定要避免把第一行数据误识别为表头(Pandas方法里的header=None就是干这个的)。
  • 为什么要转稀疏矩阵?因为你的特征字典可能有上千个词,每封邮件的特征向量里大部分是0,用稀疏矩阵存储比密集数组节省几倍甚至几十倍的内存,后续做模型训练(比如朴素贝叶斯、SVM)时也能直接兼容scikit-learn的接口。

内容的提问来源于stack exchange,提问作者Ria Yangzon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:35:39