我正在将多维数组数据写入文本文件。我这样做是明智的。文件的大小不断增长。我应该遵循哪些技术来获得输出文件的最小尺寸?
答案 0 :(得分:5)
如果你的数组有很多零,你可以使用稀疏矩阵表示:而不是将整个矩阵写入文件,只写非零元素(当然,你需要逐个编写每个元素及其索引)。假设您要编写此矩阵:
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 libraries for data compression
还有一个很好的introduction to data compression,在理论方面有点沉重,以防你想了解更多。
答案 1 :(得分:1)
由于数据非常稀疏,您可以使用SciPyPackages / Sparse关于I / O可以查看this
稀疏矩阵只是一个具有大量零值的矩阵。
所以,如果你想自己编写代码。保存sparse matrix
时,只需要输出no-zero元素的位置和元素值。例如:
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
。