【问题标题】:Why pickle.dump(obj) has different size with sys.getsizeof(obj)? How to save variable to file file?为什么 pickle.dump(obj) 与 sys.getsizeof(obj) 的大小不同?如何将变量保存到文件文件?
【发布时间】:2013-10-31 05:41:03
【问题描述】:

我使用 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')

我的问题:

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

【问题讨论】:

    标签: python random-forest


    【解决方案1】:

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

    Pickling 是一种序列化格式。序列化需要存储元数据以及对象的内容。内存大小和pickle大小只有一个粗略的相关性。

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

    如果您将泡菜存储在 ZIP 文件中,您的数据将已经被压缩;在将泡菜存储到 ZIP 之前对其进行压缩在这种情况下将无济于事,因为已经压缩的数据在额外的 ZIP 压缩之后会冒着变得更大的风险,而不是由于元数据开销和典型压缩数据中缺乏重复数据.

    【讨论】:

      猜你喜欢
      • 2020-04-15
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多