将大数据数组压缩为PNG文件
我从测量中得到一些大的ASCII文件,这些文件里有一个1000x1000的浮点数表格(大约15MB)。因为数量太多(比如每个系列还有1000个测量),所以我想有效地压缩这些文件。利用数据结构(基本上是一个1百万像素的地图,类似于图片),我尝试使用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 个回答
3
这个png文件之所以这么小,是因为它使用了zlib这个库。我觉得你可能更想直接用这个库,而不是用png的包装,这样会更简单明了。
你可以查看一下 http://zlib.net。
如果你还是想用png库,之所以会有4个值(4-tuples),是因为png图片通常有一个透明通道,所以它的格式是RGBA,你需要用到这4个值才能完整地重建你的数据。