1

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

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")

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

4

3 回答 3

4

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

如果您的浮点数可以存储为 32 位浮点数,请使用以下命令:

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 位浮点数。也许你的花车会适合它的限制器范围。

于 2011-08-04T13:35:23.867 回答
2

numpy.savez_compressed将允许您将大量数组保存到一个压缩的二进制文件中。

但是,您将无法将其压缩那么——如果您有 15GB 的数据,您不会神奇地通过压缩算法将其压缩到 200MB 中。您必须丢弃一些数据,只有您可以决定需要保留多少。

于 2011-08-04T13:35:15.943 回答
1

使用zipfilebz2gzip模块从 python 保存到 zip、 bz2 或 gz 文件。您在合理的时间内编写的任何压缩方案几乎肯定会比这些通用但经过优化和编译的解决方案更慢并且压缩比更差。也考虑接受eumiro的建议。

于 2011-08-04T13:34:06.300 回答