【发布时间】:2016-02-13 16:29:38
【问题描述】:
假设我有一个包含大约 100k 对字符串的字典和一个形状为 (100k, 500) 的 numpy 矩阵。我想将它们保存到磁盘的同一个文件中。
我现在正在做的是使用 cPickle 转储字典,并使用 scipy.io.savemat 转储矩阵。这样,转储/加载非常快。但问题是,由于我使用不同的方法,我获得了 2 个文件,并且我希望只有一个文件包含我的 2 个对象。我该怎么做?
我可以在同一个文件中对它们进行 cPickle,但是 cPickle 在大数组上速度非常慢。
【问题讨论】:
-
您是否尝试过使用更高的泡菜协议?协议 0 是 Python2.7 的默认值,它将所有内容转换为 ASCII,而协议 1 和 2 产生二进制输出(确保以二进制模式打开输出文件,即
'wb'而不是'w')。joblib.dump是序列化数组和 Python 对象的异构集合的另一种非常快速的方法。 -
看看
np.savez。它将每个变量保存到 zip 存档中的文件(可能已压缩)。您可以在字典或列表中打包一堆小的非 numpy 对象,这些对象将与 pickle 一起保存。load很懒。