gpt4 book ai didi

python - pickle numpy 数组或列表时 pickle 文件大小

转载 作者:太空狗 更新时间:2023-10-29 21:11:00 29 4
gpt4 key购买 nike

我有数千个长 (8640) 整数列表元组。例如:

type(l1)
tuple

len(l1)
2

l1[0][:10]
[0, 31, 23, 0, 0, 0, 0, 0, 0, 0]

l1[1][:10]
[0, 0, 11, 16, 24, 0, 0, 0, 0, 0]

我正在“pickle ”元组,似乎当元组属于列表时, pickle 文件比 numpy 数组时更轻。我不是 python 的新手,但绝不是专家,我真的不知道如何为不同类型的对象管理内存。我本来希望 numpy 数组更轻,但这是我在 pickle 不同类型的对象时得到的:

#elements in the tuple as a numpy array
l2 = [np.asarray(l1[i]) for i in range(len(l1))]
l2
[array([ 0, 31, 23, ..., 2, 0, 0]), array([ 0, 0, 11, ..., 1, 0, 0])]

#integers in the array are small enough to be saved in two bytes
l3 = [np.asarray(l1[i], dtype='u2') for i in range(len(l1))]
l3
[array([ 0, 31, 23, ..., 2, 0, 0], dtype=uint16),
array([ 0, 0, 11, ..., 1, 0, 0], dtype=uint16)]

#the original tuple of lists
with open('file1.pkl','w') as f:
pickle.dump(l1, f)

#tuple of numpy arrays
with open('file2.pkl','w') as f:
pickle.dump(l2, f)

#tuple of numpy arrays with integers as unsigned 2 bytes
with open('file3.pkl','w') as f:
pickle.dump(l3, f)

当我检查文件大小时:

 $du -h file1.pkl
72K file1.pkl

$du -h file2.pkl
540K file2.pkl

$du -h file3.pkl
136K file3.pkl

因此,即使整数保存在两个字节中,file1 也比 file3 轻。我更喜欢使用数组,因为解压缩数组(并处理它们)比列表快得多。但是,我将存储大量这样的元组(在 pandas 数据框中),因此我也想尽可能优化内存。

我需要它工作的方式是,给出我做的元组列表:

#list of pickle objects from pickle.dumps
tpl_pkl = [pickle.dumps(listoftuples[i]) for i in xrange(len(listoftuples))]

#existing pandas data frame. Inserting new column
df['tuples'] = tpl_pkl

总的来说,我的问题是:为什么 numpy 数组在 pickle 到文件中后占用的空间比列表多?

也许如果我理解了我可以找到存储数组的最佳方式的原因。

提前感谢您的宝贵时间。

最佳答案

如果你想在磁盘上存储 numpy 数组,你根本不应该使用 pickle。调查numpy.save()及其亲属。

如果您使用的是 pandas,那么它也有自己的方法。您可能想咨询this articlethis question 的答案以获得更好的技术。

关于python - pickle numpy 数组或列表时 pickle 文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32485493/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com