python pickle文件大小_Pickle在Pickle numpy数组或列表时的文件大小

我有数千个长的(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]

我在“pickling”元组,看起来元组是列表的时候,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数组pickling到一个文件中之后,numpy数组比列表占用更多的空间有原因吗?

如果我明白了为什么我可以找到一种存储阵列的最佳方法。

提前谢谢你的时间。

你可能感兴趣的:(python,pickle文件大小)