簡體   English   中英

導入大型數據文件的有效方法,Python

[英]Efficient way to import large data file, Python

我正在研究一個從兩個NetCDF文件獲取數據的項目,每個文件的大小為521.8 MB。 誠然,這些都是相當大的文件。 我正在使用內存為4 GB的MacBook Pro,但是計算機的使用年限約為4年。 代碼是用Python編寫的。

這些文件包含一年中整個地球的氣象數據。 它是一個4D數組,其中包含時間(長度1460),高度(長度17),緯度(長度73)和經度(長度144)。 我一次只需要這些信息的某些部分。 具體來說,我需要所有時間,但只需要一個海拔高度,並且只需要特定的經緯度區域(20x44)。

我的代碼從兩個文件中收集了所有這些數據,僅識別了我需要的數據,執行了計算,然后將數據輸出到文本文件中。 在完成該年的工作后,它遍歷了63年的數據,即126個同等大小的文件。 現在,代碼說它在過程開始時就耗盡了內存。 相關代碼似乎是:

from mpl_toolkits.basemap.pupynere import NetCDFFile

#Create the file name for the input data.
ufile="Flow/uwnd."+str(time)+".nc"
vfile="Flow/vwnd."+str(time)+".nc"

#Get the data from that particular file.
uu=NetCDFFile(ufile)
vv=NetCDFFile(vfile)

#Save the values into an array (will be 4-dimentional)
uwnd_short=uu.variables['uwnd'][:]
vwnd_short=vv.variables['vwnd'][:]

因此,第一部分將創建NetCDF文件的名稱。 第二部分從NetCDF文件中獲取所有數據。 第三部分將導入的數據放入4D數組中。 (由於Python如何處理數據,從技術上講,這可能不是一個數組,但由於我的C ++背景,我認為是這樣。由於缺乏適當的詞匯而深表歉意。)稍后,我分離出所需的特定數據從4D數組中進行計算。 麻煩在於這曾經可以工作,但是現在我的計算機在vv=NetCDFFile(vfile)行上運行時內存vv=NetCDFFile(vfile)

某處可能存在內存泄漏? 有沒有一種方法只能獲取我需要的特定數據范圍,因此我不會導入整個文件? 從引入數據到整理出我需要的數據部分再進行計算,是否有更有效的方法?

您可能需要做的是使用nccopy重新整理文件,然后處理這些塊,因為某些變量似乎很大以適合內存。 那或獲得更多的內存(或虛擬內存)。

nccopy文檔在這里http://www.unidata.ucar.edu/software/netcdf/docs/guide_nccopy.html

不管它的價值是多少,我確實在計算機上存儲了太多數據,並且內存不足。 我使我的外部硬盤驅動器可以工作,並刪除了一堆文件。 然后,我最終弄清楚了如何使用ncgen,ncdump等。我能夠僅從每個大文件中取出所需的數據,並創建一個僅包含該數據的新文件。 這將我的NetCDF文件從500MB減少到5MB。 這使得代碼也可以更快地運行。

暫無
暫無

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

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