我有一个大的文本数据集及其相应的标签。我曾经使用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.dtypedtype('<U92569')texts2.dtypedtype('O')
1 回答
繁星淼淼
TA贡献1775条经验 获得超11个赞
您的第一个数组使用 NumPy 字符串 dtype。这些是固定宽度的,因此数组的每个元素占用的空间与数组中最长的字符串一样多,其中一个字符串的长度为 92569 个字符,从而提高了较短字符串的空间需求。
您的第二个数组正在使用 object dtype。它只包含对一堆常规 Python 对象的引用,因此每个元素都是一个常规 Python 字符串对象。每个元素都有额外的对象开销,但每个字符串只需要足够的空间来保存自己的数据,而不是足够的空间来保存数组中最大的字符串。
此外,NumPy unicode dtypes 总是每个字符使用 4 个字节,而如果字符串不包含任何高代码点,则 Python 字符串对象使用较少。
添加回答
举报
0/150
提交
取消