我正在将多维数组数据写入文本文件。我这样做是明智的。文件的大小不断增长。我应该遵循哪些技术来获得尽可能小的输出文件大小?
2 回答
如果你的数组有很多零,你可以使用稀疏矩阵表示:而不是将整个矩阵写入文件,只写入非零元素(当然,你需要一个一个地写入每个元素及其索引)。假设你想写这个矩阵:
0 0 0 2
1 0 0 0
0 0 0 0
0 0 3 0
0 0 0 0
您可以将其写入文件:
0 3 2
1 0 1
3 2 3
在每一行中,第一个数字是行,第二个是列,第三个是存储的值。
如果将文件写为文本,可以切换为二进制格式:写文本时,每个数字使用一个字节;在二进制中,每个数字使用固定数量的字节,并且不必表示空格和换行符:
100 200 300
如果使用文本格式,将数字写入文件需要 11 个字节。但是,如果您写入三个 16 位整数,它们可能会使用 6 个字节来写入。在 Python 中,使用 "wb" 和 "rb" 模式打开二进制文件,然后将它们写入字节:
f = open('file', 'wb')
f.write('%c' % 123)
f.close()
或者——更有效地,
import array
f = open('file', 'wb')
data = array.array('B')
data.append(1)
data.append(2)
data.append(3)
data.tofile(f)
f.close()
否则,您可能应该尝试使用标准技术压缩数据结构。既然您用 标记了您的问题python
,您可能会对这些用于数据压缩的 Python 库感兴趣
还有一个很好的数据压缩介绍,在理论上有点沉重,以防你想了解更多。
因为数据比较稀疏,可以使用SciPyPackages / Sparse关于 I/O 可以看这个
稀疏矩阵只是具有大量零值的矩阵。
所以,如果你想自己写代码。保存时sparse matrix
,只需要输出非零元素的位置和元素值即可。例如:
sparse matrix
:_
1 0 0 1
0 0 0 0
0 0 5 0
0 0 0 10
需要保存到文件的数据是:
0 0 1
0 3 1
2 2 5
3 3 10
当sparse matrix
种植者时,这种方法可以减少数据保存到file
.
而何时使用data file
,您只需original matrix
要从数据中恢复。
祝你好运