簡體   English   中英

將大型Python陣列保存到磁盤以便以后重復使用 - hdf5? 其他一些方法?

[英]Saving large Python arrays to disk for re-use later — hdf5? Some other method?

我目前正在重寫一些python代碼,以提高效率,我有一個關於保存python數組的問題,以便以后可以重新使用/操作它們。

我有大量數據,保存在CSV文件中。 每個文件都包含我感興趣的數據的時間戳值,並且我已經達到了必須處理數千萬個數據點的程度。 由於處理時間過長且效率低下,數據已經變得很大 - 每次添加一些新數據時,必須重新處理當前代碼寫入整個數據集的方式。

我想要做的是:

  1. 將所有現有數據讀入python數組
  2. 將變量數組保存到某種數據庫/文件中
  3. 然后,下次添加更多數據時,我加載數據庫,附加新數據,然后重新保存。 這樣,任何時候都只需要處理少量數據。
  4. 我希望保存的數據可以訪問更多的python腳本,但也要相當“人類可讀”,以便它可以在諸如OriginPro或甚至Excel的程序中處理。

我的問題是:什么是保存數據的最佳格式? HDF5似乎可能具備我需要的所有功能 - 但是像SQLite這樣的東西會更有意義嗎?

編輯:我的數據是單維的。 我基本上有30個數組(數百萬,1)的大小。 如果不是因為有這么多點,那么CSV將是一個理想的格式! 我不太可能想要查找單個條目 - 更可能的是我可能想要繪制小的數據子集(例如最近100小時,或最后1000小時等)。

也許你可以使用像Redis,Berkeley DB,MongoDB這樣的鍵值數據庫...但是關於你將要使用的模式的更多信息會更好。

EDITED

例如,如果選擇Redis ,則可以索引很長的列表:

列表的最大長度為232 - 1個元素(4294967295,每個列表超過40億個元素)。 從時間復雜性的角度來看,Redis列表的主要特征是支持在頭部和尾部附近恆定時間插入和刪除元素,即使有數百萬個插入項目。 訪問元素在列表的極端附近非常快,但如果您嘗試訪問非常大的列表的中間,則速度很慢,因為它是O(N)操作。

HDF5是一個很好的選擇! 它有一個很好的界面,被廣泛使用(至少在科學界),很多程序都支持它(例如matlab),有C,C ++,fortran,python等庫...它有一個完整的工具集顯示HDF5文件的內容。 如果您以后想要對數據進行復雜的MPI計算,則HDF5支持並發讀/寫。 它非常適合處理非常大的數據集。

我將使用具有固定記錄長度的單個文件用於此用例。 沒有專門的數據庫解決方案(在這種情況下對我來說似乎有點過頭了),只是簡單的舊struct (請參閱struct.py的文檔)和文件上的read()/ write()。 如果您只有數百萬個條目,那么一切都應該在幾十或幾百MB大小的單個文件中很好地工作(對於任何文件系統來說都不是太大)。 您還可以隨機訪問子集,以備日后需要時使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM