Skip to main content
 首页 » 编程设计

python之压缩测量数据文件

2025年05月04日16over140

从测量中我得到的文本文件基本上包含一个 float 表,尺寸为 1000x1000。那些占用大约 15MB 的空间,考虑到我在一个系列中得到大约 1000 个结果文件,保存起来是 Not Acceptable 。所以我试图在不丢失数据的情况下尽可能多地压缩它们。我的想法是将数字分组为超过我预期范围的约 1000 步并保存它们。这将提供足够的分辨率。但是我仍然有 1.000.000 点需要考虑,因此我的结果文件仍然约为 4MB。我可能无法进一步压缩它? 更大的问题是这需要的计算时间。现在我估计每个文件需要 10-12 秒,所以 1000 个文件大约需要 3 小时。 WAAAAY太多了。这是我想出的算法,你有什么建议吗?可能有更有效的算法来做到这一点,但我不是一个程序员......

import numpy 
 
data=numpy.genfromtxt('sample.txt',autostrip=True, case_sensitive=True) 
out=numpy.empty((1000,1000),numpy.int16) 
i=0 
min=-0.5 
max=0.5 
step=(max-min)/1000 
while i<=999: 
    j=0 
    while j<=999:  
        k=(data[i,j]//step) 
        out[i,j]=k 
        if data[i,j]>max: 
            out[i,j]=500 
        if data[i,j]<min: 
            out[i,j]=-500 
        j=j+1 
    i=i+1 
numpy.savetxt('converted.txt', out, fmt="%i") 

提前感谢您提供的任何提示! 雅各布

请您参考如下方法:

我看到您将 numpy 数组存储为文本文件。有一种更快、更节省空间的方法:直接转储它。

如果你的 float 可以存储为 32 位 float ,那么使用这个:

data = numpy.genfromtxt('sample.txt',autostrip=True, case_sensitive=True) 
 
data.astype(numpy.float32).dump(open('converted.numpy', 'wb')) 

然后你可以阅读它

data = numpy.load(open('converted.numpy', 'rb')) 

文件将是 1000x1000x4 字节,大约 4MB。

最新版本的 numpy 支持 16 位 float 。也许您的浮标将适合其限制器范围。