从测量中我得到的文本文件基本上包含一个 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 。也许您的浮标将适合其限制器范围。
