【发布时间】:2020-04-26 10:54:05
【问题描述】:
我有大量文本及其相应标签的数据集。我曾经使用 csv 模块读取 csv 文件,然后在该数据上构建 numpy 数组,直到我发现 numpy 中的大型文本数组内存效率低下。
with open('sample.csv', 'r') as f:
data = csv.reader(f.readlines())
texts = np.array([d[0] for d in data])
这需要大约 13GB 内存。但是当pandas 读取相同的数据时,就像什么都没发生一样,内存中没有数据。我的意思是,它的内存使用量并没有减少 50% 甚至 20%,它只需要 300 MB 的内存。
data = pd.read_csv('sample.csv')
texts2 = np.array(data['text'])
texts 和 texts2 数组之间的唯一区别是 dtype:
texts.dtype
dtype('<U92569')
texts2.dtype
dtype('O')
【问题讨论】:
-
'U92569' dtype 表示 numpy 数组为每个元素分配 92569 个字符(每个 4 个字节)(我怀疑每行一个元素)。使用
texts.shape,我们可以计算内存使用量。那 92569 是最长字符串的长度。你看过texts的元素吗? -
@hpaulj 文本元素是一些可变大小的 cmets。