将大数据数组压缩为PNG文件

1 投票
2 回答
922 浏览
提问于 2025-04-17 02:11

我从测量中得到一些大的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 个回答

0

imsave 是一个可以把你的数组保存成图片文件的工具,但你能确定它不会降低图片的质量吗?通常情况下,PNG格式的图片每个颜色通道是8位的。这意味着使用pylab的imread功能时,可能会降低你的数据精度。

你有没有对比过 raw_data.txt 和 converted.txt 这两个文件?你可以考虑使用 gzip 模块或者 bz2 模块来处理。具体可以参考一下 bz2 的文档。

3

这个png文件之所以这么小,是因为它使用了zlib这个库。我觉得你可能更想直接用这个库,而不是用png的包装,这样会更简单明了。

你可以查看一下 http://zlib.net

如果你还是想用png库,之所以会有4个值(4-tuples),是因为png图片通常有一个透明通道,所以它的格式是RGBA,你需要用到这4个值才能完整地重建你的数据。

撰写回答