python gzip : OverflowError size does not fit in an int

标签 python numpy serialization gzip pickle

我正在尝试序列化一个大型 python 对象,该对象由使用 pickle/cPickle 和 gzip 的 numpy 数组元组组成。该过程适用于特定大小的数据,之后我收到以下错误:

--> 121     cPickle.dump(dataset_pickle, f)

    ***/gzip.pyc in write(self, data)
    238             print(type(self.crc))
    239             print(self.crc)
--> 240             self.crc = zlib.crc32(data, self.crc) & 0xffffffffL
    241             self.fileobj.write( self.compress.compress(data) )

OverflowError: size does not fit in an int

numpy 数组的大小约为 1.5 GB,发送到 zlib.crc32 的字符串超过 2 GB。我在 64 位机器上工作,我的 Python 也是 64 位的

>>> import sys
>>> sys.maxsize
9223372036854775807

是 python 的错误还是我做错了什么?有什么好的替代方法可以压缩和序列化 numpy 数组吗?我正在看numpy.savez , PyTables和 HDF5,但最好知道我为什么会遇到这个问题,因为我有足够的内存


更新:我记得在某处读到这可能是由使用旧版本的 Numpy 引起的(我曾经是),但我已经完全切换到 numpy.save/savez 而不是它实际上比 cPickle 快(至少在我的情况)

最佳答案

这似乎是 python 2.7 中的一个错误

https://bugs.python.org/issue23306

从检查错误报告来看,似乎没有悬而未决的解决方案。你最好的选择是转移到 python 3,它显然没有出现这个错误。

关于 python gzip : OverflowError size does not fit in an int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30376224/

相关文章:

python - 让我们为python的numpy做一个N维像素分箱/分桶的引用实现

Python - 获取最密集点的坐标

python - 如何检查输入图像是否与裁剪后的脸部照片匹配?

python - pick_event 使用 matplotlib 获取点

python - 在 python 中使用字典或将 groupby 值映射到原始数据帧

python - 使用 Django Rest Framework 从模型序列化属性(getter 和 setter)的问题

android - 如何使用 Gson 正确序列化/反序列化 kotlin 中的复杂对象?

python - 如何在 "stop"和 "resume"长时间运行Python脚本?

python - 为什么 numpy.sum 没有给我正确的结果?

c# - 反序列化时传入对象引用