2016-04-29 35 views
1

存儲數據是這樣的:如何存儲這個文件集合?

39861 // number of documents 
28102 // number of words of the vocabulary (another file) 
3710420 // number of nonzero counts in the bag-of-words 
1 118 1 // document_id index_in_vocabulary count 
1 285 3 
... 
2 46 1 
... 
39861 27196 5 

我們建議存儲在矩陣(大小爲39861 X 39861我猜的),因爲它不會裝入內存*here我可以假設每個整數需要存儲24個字節,因此具有密集矩陣的27 Gb(= 39861 * 28102 * 24字節)。那麼,我應該使用哪種數據結構來存儲數據集呢?


數組列表的?

  • 如果是這樣(每個列表將有兩個數據成員節點,該 index_in_vocubularycount),只是張貼了肯定的回答。如果我認爲每個文檔平均有200分的話,那麼空間將是:

no_of_documents X words_per_doc * no_of_datamembers * 24 = 39861 * 200 * 2 * 24 = 0.4千兆

  • 如果不是,您會建議哪一個(這將需要更少的空間)?

存儲數據集後,我們需要找到k-最近鄰(K類似文件),用蠻力和LSH。


* 我有3.8 2GB的我個人的筆記本電腦,但我有機會與〜8GB內存臺式機。

+0

誰建議我們不要將數據存儲在矩陣中?也許我們應該問問他們。 –

+0

教授@Robᵩ,我更新了。原因是它不適合記憶。然而,課程沒有任何TA(!?!?),所以我們是在我們自己的字面上。 – gsamaras

+0

存儲完數據後,下一步是什麼?你需要檢索數據嗎?在裏面搜索?執行圖形操作? –

回答

1

考慮使用HDF5格式。

它將顯着減少文件的大小。

請參閱my answer to similar question

+0

帶來HDF5格式的1月好主意,+1。但是,我記得只使用該格式存儲到文件中,並且在將數據集加載到內存時,我們將使用我們自己的數據結構,然後在C++中使用.. – gsamaras

+0

我不確定,我理解您的評論。如果將數據存儲到HDF5文件中,則可以利用這一事實,格式已定義,並且存在各種編程語言(Python,C++,Java,FORTRAN和其他)的API。 –

+0

嗯,我看到1月。但是,你的答案並沒有說明爲什麼我不應該使用我建議的數據結構。 – gsamaras