背景
目前,我正在压缩一个包含九个变量的numpy数组和另一个大小为110的numpy数组(大小是恒定的,例如,此对象的每个实例都包含九个变量和一个大小为110的numpy数组)。这九个变量由浮点和整数组成,而对象中的numpy数组也有整数作为值。我随机抽取样本,试图找出物体的实际大小。我没有使用
sys.getsizeof()
由于如果存在嵌套对象,此方法在获取对象的实际大小时似乎不可靠,因此我使用Pypler来计算对象的大小,从而生成以下代码:
print("Size before compression: {}".format(asizeof.asizeof(object) ))
Size before compression: 25200
问题一
我做的下一步是将对象分成两部分:一部分包含九个变量,另一部分包含numpy数组。当我尝试检查这两个对象的内存使用情况时,我得到了以下结果:
print('Size waveform before compression: {}'.format(asizeof.asizeof(np_array)))
112
print('Size other variables before compression: {}'.format(asizeof.asizeof(other_vars)))
96
我的问题是:
问题二
我压缩了两个对象(在本例中,我使用了Pylzma)并收到了以下值:
print('Size waveform after compression: {}'.format(asizeof.asizeof(compressed_np_array)))
Size waveform after compression: 5808
print('Size other variables after compression: {}'.format(sys.getsizeof(compressed_vars)))
Size other variables after compression: 7818
这似乎更合理,但是,当我将两个对象合并以接收一个字节对象时,我得到的内存使用量与我预期的不同,例如:
compressed_record = compressed_vars + compressed_np_array
print("Size after compression: {}".format(asizeof.asizeof(compressed_object)))
Size after compression: 13592
我希望整个对象是13626,而不是实际值13592
提前感谢您阅读/回答我的问题,我很高兴在必要时提供更多信息
我不能100%确定您的对象是或
bytes
类型(可能,因为它们是压缩模块的输出),但是添加2字节的对象可以减少大小结果:
您可以看到,“合并”对象的长度为
57
字节,其中每个对象在添加之前的长度为45
字节。这是因为实际数据要小得多,您没有考虑bytes
是一个具有属性的对象。请参见,在我的系统上,空bytes
对象的大小为33
因此,通过添加2个字节的对象,我去掉了一组非数据(对象属性,比如大小),得到的对象稍微小一些
无论如何,您的数据足够大,可以忽略这种差异。但是当使用大量小对象时,这种开销会消耗大量内存(如上面的示例所示)
相关问题 更多 >
编程相关推荐