为了账号安全,请及时绑定邮箱和手机立即绑定

为什么相同数据的 str 数组和 object 数组的内存使用量不同?

为什么相同数据的 str 数组和 object 数组的内存使用量不同?

MYYA 2022-10-25 10:36:25
我有一个大的文本数据集及其相应的标签。我曾经使用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 字符串对象使用较少。


查看完整回答
反对 回复 2022-10-25
  • 1 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信