2013-04-13 36 views
1

我已經找遍了這個答案,但沒有什麼真的似乎適合該法案。我正在嘗試使用ATpy讀取非常大的文件,數據以numpy數組的形式出現。對於較小的文件下面的代碼已經足夠:用ATpy和numpy高效讀取大文件?

sat = atpy.Table('satellite_data.tbl') 

從那裏我建立了一些,我有後來操縱用於繪圖的目的變量。這是很多這些類型的操作的:

w1 = np.array([sat['w1_column']]) 
w2 = np.array([sat['w2_column']]) 
w3 = np.array([sat['w3_column']]) 

colorw1w2 = w1 - w2 #just subtracting w2 values from w1 values for each element 
colorw1w3 = w1 - w3 

但對於非常大的文件的計算機無法處理它。我認爲所有的數據都是在解析開始之前存儲在內存中的,對於2GB文件來說這是不可行的。那麼,我可以用什麼來處理這些大文件?

我見過大量的帖子,人們將數據分成塊,並使用for循環遍歷每一行,但我認爲這對我來說並不適用,因爲這些文件的性質,以及我需要在這些陣列上執行的操作種類。我不能只對文件的每一行執行一次操作,因爲每行都包含許多分配給列的參數,在某些情況下,我需要對來自單個列的數據執行多個操作。

老實說,我並不真正瞭解ATpy和numpy幕後的一切。我對Python很陌生,所以我很欣賞那些明確表達出來的答案(即不依賴於大量的隱含編碼知識)。必須有一個乾淨的解析方式,但我沒有找到它。謝謝。

+0

什麼是輸入文件的格式?他們是平面二進制文件嗎? –

回答

0

對於非常大的數組(大於內存容量),您可以使用pytables以一些聰明的方式(使用HDF5格式)將數組存儲在磁盤上,以便在不加載整個數組的情況下對其進行操作一旦。然後,您不必手動分解數據集或一次處理一行。

我一無所知ATpy,所以你可能會更好,詢問的ATpy郵件列表或至少一些天文Python用戶郵件列表,因爲它可能是ATpy內置了另一種解決方案。


從pyables網站:

PyTables是一個用於管理分層數據集的軟件包,旨在高效且輕鬆地處理極大量的數據。

PyTables建立在HDF5庫之上,使用Python語言和NumPy包。

...快速,但非常容易使用的工具,交互式瀏覽,處理和搜索大量的數據。 PyTables的一個重要特性是它優化了內存和磁盤資源,使數據佔用的空間更少...

0

使用熊貓進行研究。它是爲這種工作而設計的。但是數據文件需要以像hdf5這樣結構良好的二進制格式存儲,以便通過任何解決方案獲得良好的性能。

相關問題