2012-06-09 77 views
2

我正在將多維數組數據寫入文本文件。我正在做這一行明智的。文件的大小不斷增長。我應該遵循什麼技術來獲得輸出文件的最小可能大小?減少文本文件大小的編程技巧

+3

如何稀疏的數據?如果數據非常稀疏,則可以只存儲非零值元素的位置。 –

+2

該文件是否需要保持人類可讀? –

+1

數據非常稀疏(約32k維度,可能約有200個值)。我使用-1作爲缺失值(或0)的佔位符。我在這種形式中需要它,因爲我正在進一步處理數據。 – viper

回答

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

如何在將文本寫入文件(在python中)時切換爲二進制格式。我的輸出結果將以0-100 – viper

+0

@viper:answer編輯,以包含Python示例! – Jay

+1

只是出於好奇心,因爲你的「更有效」的評論 - 我認爲python的寫入會緩衝輸出時,不寫入控制檯,不正確? – Voo

1

因爲數據是相當稀少,可以用SciPyPackages/Sparse關於I/O可以看看this

稀疏矩陣是簡單地用大量零個值的矩陣。

所以,如果你想自己寫代碼。當保存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

祝你好運