在pickle模块对数据进行序列化时,似乎使用了字符串转义字符,这会导致处理numpy数组等大型数据时效率低下。建议采用以下方式改善:
z = numpy.zeros(1000, numpy.uint8)
len(z.dumps())
len(cPickle.dumps(z.dumps()))
长度分别为1133个字符和4249个字符。
z.dumps()的输出类似于"\x00\x00" (字符串中实际上有零),但pickle似乎使用了该字符串的repr()函数,得到"'\x00\x00'"(零为ascii零)。
即 ("0" in z.dumps() == False) and ("0" in cPickle.dumps(z.dumps()) == True)。