python - joblib 与 pickle 的不同用例是什么?

标签 python pickle scikit-learn

背景:我刚刚开始使用 scikit-learn,并在页面底部阅读了有关 joblib, versus pickle 的信息.

it may be more interesting to use joblib’s replacement of pickle (joblib.dump & joblib.load), which is more efficient on big data, but can only pickle to the disk and not to a string

我在 Pickle 上阅读了这个问答, Common use-cases for pickle in Python想知道这里的社区是否可以分享 joblib 和 pickle 之间的差异?什么时候应该使用一个而不是另一个?

最佳答案

  • joblib 在大型 numpy 数组上通常要快得多,因为它对 numpy 数据结构的数组缓冲区进行了特殊处理。要了解实现细节,您可以查看 source code .它还可以在使用 zlib 或 lz4 进行 pickle 时动态压缩该数据。
  • joblib 还可以在加载时对未压缩的 joblib-pickled numpy 数组的数据缓冲区进行内存映射,从而可以在进程之间共享内存。
  • 如果你不 pickle 大型 numpy 数组,那么常规 pickle 会明显更快,尤其是在小型 Python 对象的大型集合上(例如 str 对象的大字典),因为 pickle 模块标准库是用 C 实现的,而 joblib 是纯 python。
  • 自从 PEP 574(Pickle 协议(protocol) 5)在 Python 3.8 中合并后,现在使用标准库 pickle 大型 numpy 数组的效率要高得多(内存方面和 cpu 方面)。在这种情况下,大型数组意味着 4GB 或更多。
  • joblib 仍然可以在 Python 3.8 中使用,以使用 mmap_mode="r" 在内存映射模式下加载具有嵌套 numpy 数组的对象

关于python - joblib 与 pickle 的不同用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12615525/

相关文章:

python - 类型错误 : can only concatenate str (not "numpy.int64") to str

python - 如何转储内部有 import 的函数

python - 无法在 Python 中 pickle Tensorflow 对象 - TypeError : can't pickle _thread. _local 对象

python - 将 Pickled 数据发送到 Graphite

python - 我该如何解决这个错误?名称错误 : name ‘model’ is not defined

python - load_digits() 和 fetch_mldata ("MNIST Original"有什么区别)

python - python中的向量矩阵乘法?

python - Pandas 用新值更新数据框行

python - Azure Api 和 ChatGPT 的问题 (python)

python - 使用 scikit-learn 在朴素贝叶斯分类器中混合分类和连续数据