为什么pickle.dump(obj)与sys.getsizeof(obj)有不同的大小?如何将变量保存到文件文件?

0 python random-forest

我使用来自python的scikit lib的随机森林的分类器来做我的练习.结果会改变每个运行时间.所以我运行1000次并获得平均结果.

我将对象rf保存到文件中以便稍后通过pickle.dump()进行预测,并获得大约4MB的文件.但是,sys.getsizeof(rf)只给我36个字节

rf = RandomForestClassifier(n_estimators = 50)
rf.fit(matX, vecY)
pickle.dump(rf,'var.sav')
Run Code Online (Sandbox Code Playgroud)

我的问题:

  • 获取RandomForestClassifier对象的大小似乎是错误的sys.getsizeof(),不是吗?为什么?
  • 如何在zip文件中保存对象,使其尺寸更小?

Mar*_*ers 5

getsizeof()为您提供对象的内存占用,而不是该对象引用的任何其他值.您需要递归对象以查找所有属性的总大小,以及这些属性所包含的任何内容等.

酸洗是一种序列化格式.序列化需要存储元数据以及对象的内容.内存大小和腌菜大小只有粗略的相关性.

Pickles是字节流,如果您需要更紧凑的字节流,请使用压缩.

如果你是存储在ZIP文件的泡菜,你的数据已经被压缩; 在将ZIP存储在ZIP中之前压缩pickle将无济于事,因为已经压缩的数据在额外的ZIP压缩之后运行风险变,而不是由于元数据开销和典型压缩数据中缺少重复数据.