2

我正在将多维数组数据写入文本文件。我这样做是明智的。文件的大小不断增长。我应该遵循哪些技术来获得尽可能小的输出文件大小?

4

2 回答 2

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 库感兴趣

还有一个很好的数据压缩介绍,在理论上有点沉重,以防你想了解更多。

于 2012-06-09T03:08:20.177 回答
1

因为数据比较稀疏,可以使用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要从数据中恢复。

祝你好运

于 2012-06-09T03:10:27.510 回答