将大数据阵列压缩为PNG文件

时间:2011-09-13 09:17:14

标签: python compression png matplotlib

作为测量的输出文件,我得到大的ASCII文件,包含一个1000x1000的浮点数表(~15MB)。由于那些大量不切实际(即每个系列另外1000次测量),我想有效地压缩它们。利用数据结构(基本上是1 MP地图 - >图片)我试图使用pylabs imsave函数从原始数据生成PNG文件,这很好地工作并产生200kB(!!!!!)* .png。

为了稍后分析数据,我显然需要对PNG进行反向处理,并希望得到相同的初始表。然而,所谓的功能,imread,产生一个4元组,我无法弄清楚。有没有人有这样一个过程的经验,或者更好地了解如何解决压缩问题(简单地压缩甚至远程压缩不够)。

import numpy
import Image
import matplotlib
import pylab

data=numpy.genfromtxt('raw data.txt',autostrip=True, case_sensitive=True)
pylab.imsave('convert.png',data)

out=pylab.imread('convert.png')
numpy.savetxt('converted.txt', out[0], fmt='%1.4e')

2 个答案:

答案 0 :(得分:3)

png如此之小的事实是它使用了zlib库。我认为你宁愿使用那个库而不是png包装器,它也不会那么令人困惑。

请参阅http://zlib.net

如果您仍想使用png库,那么您有4元组的事实是因为png图像通常具有Alpha通道,因此格式为RGBA,您必须使用全部4来重建数据。

答案 1 :(得分:0)

imsave将您的数组保存为图片文件,但是您能确定它不会对图片进行缩减采样吗?通常,PNG图像是每通道8位。 pylab imread可能会对您的数据进行下采样,从而牺牲精度。

您是否在raw_data.txt和converted.txt之间进行了差异?一个选项是使用gzip模块或bz2模块。参见例如bz2