2011-10-25 60 views
11

似乎有很多Python與SQLite(sqlite3,atpy)和HDF5(h5py,pyTables)接口的選擇 - 我想知道是否有人使用這些以及numpy數組或數據表(結構化/記錄數組),以及哪些最能與每種數據格式(SQLite和HDF5)的「科學」模塊(numpy,scipy)無縫集成。從SQLite和HDF5格式導出/導入numpy,scipy

+0

你問關於將numpy數據保存到SQLite表嗎? –

+0

是的,其中的一部分... – hatmatrix

回答

21

其中大部分取決於您的使用情況。

我處理的不是傳統的關係型數據庫的各種基於HDF5的方法多了很多經驗,所以我不能評論對蟒蛇的SQLite庫太多...

至少儘可能h5py VS pyTables,它們都通過numpy數組提供非常無縫的訪問,但它們面向非常不同的用例。

如果您有n維數據要快速訪問基於索引的任意切片,那麼使用h5py要簡單得多。如果你有更像表的數據,並且你想查詢它,那麼pyTables是一個更好的選擇。

h5py相對於pyTables是一個相對於HDF5庫的「香草」包裝。如果要定期從另一種語言訪問HDF文件(pyTables添加一些額外的元數據),這是一件非常好的事情。 h5py可以執行lot,但對於某些使用情況(例如,pyTables所做的),您將需要花費更多時間調整內容。

pyTables有一些真的不錯的功能。但是,如果你的數據看起來不像一張桌子,那麼它可能不是最好的選擇。爲了給出更具體的例子,我用相當大的(幾十GB)3和4維數據數組處理了大量工作。它們是同色陣列的浮點數,整數,uint8等。我通常想訪問整個數據集的一小部分。 h5py使得這個非常簡單,並且能夠自動猜測合理的塊大小。從磁盤中抓取任意塊或片比用簡單的memmapped文件快得多。 (強調任意...顯然,如果要抓取整個「X」切片,則C順序的memmapped陣列不可能被擊敗,因爲「X」切片中的所有數據都在磁盤上相鄰。)

作爲一個反例,我的妻子從大量的傳感器採集數據,這些傳感器在幾年內每分鐘採樣一次到第二次採樣。她需要在她的數據上存儲和運行任意查詢(以及相對簡單的計算)。 pyTables使這個用例非常容易和快速,並且仍然比傳統的關係數據庫有一些優勢。 (特別是在磁盤使用情況和速度很大(基於索引)的數據塊可以讀入內存)

+0

謝謝 - 這正是我在尋找的信息,在對比'h5py'和'pyTables' ... ...但是這樣並不一定與NumPy一起使用,但它很順利與NumPy數組中的實際數據進行比較。我將發佈'SQLite'部分作爲一個單獨的問題。 – hatmatrix

+4

@JoeKington:附註:我不確定「C命令的memmapped數組是不可能被擊敗的」:使用memcpy()複製數據可能比傳輸壓縮數據更慢並且在它到達處理器時解壓縮(http: //blosc.pytables.org/trac)。最終結果是處理壓縮陣列數據可能比處理未壓縮陣列數據更快。 – EOL