从测量我得到的文本文件基本上包含浮点数表,尺寸为1000x1000。这些占用大约15MB的空间,考虑到我在一系列中获得大约1000个结果文件,这是不可接受的。所以我试图在不丢失数据的情况下尽可能地压缩它们。我的想法是在我期望的范围内将数字分组为~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")
提前感谢您提供的任何提示! 雅各布
答案 0 :(得分: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位浮点数。也许你的浮子适合它的限制范围。
答案 1 :(得分:2)
numpy.savez_compressed
将允许您将大量数组保存到单个压缩的二进制文件中。
然而,你无法将那么压缩它 - 如果你拥有15GB的数据,你就不会通过压缩算法神奇地适应200MB。您必须丢弃一些数据,只有您可以决定需要保留多少数据。
答案 2 :(得分:1)