簡體   English   中英

python中netcdf變量的高效讀取

[英]Efficient reading of netcdf variable in python

我需要能夠快速讀取 python 中的大量 netCDF 變量(每個文件 1 個變量)。 我發現 netCDF4 庫中的 Dataset 函數與其他語言(例如 IDL)中的讀取實用程序相比相當慢。

我的變量的形狀為 (2600,5200),類型為 float。 它們對我來說似乎沒有那么大(文件大小 = 52Mb)。

這是我的代碼:

import numpy as np
from netCDF4 import Dataset
import time
file = '20151120-235839.netcdf'
t0=time.time()
openFile = Dataset(file,'r')
raw_data = openFile.variables['MergedReflectivityQCComposite']
data = np.copy(raw_data)
openFile.close()
print time.time-t0

讀取一個變量(一個文件)大約需要 3 秒。 我認為主要的放緩是 np.copy。 raw_data<type 'netCDF4.Variable'> ,因此是副本。 這是在python中進行netCDF讀取的最佳/最快方法嗎?

謝謝。

Numpy 的強大之處在於,您可以通過它保留的有關數據的元數據,為內存中的現有數據創建視圖。 因此,通過指針,副本總是比視圖慢。 正如 JCOidl 所說,目前尚不清楚您為什么不使用:

 raw_data = openFile.variables['MergedReflectivityQCComposite'][:] 

有關更多信息,請參閱SciPy Cookbook和 SO 查看到 numpy 數組?

我不知道如何評價 np.copy 操作(這確實很慢),但我發現 UCAR 的 PyNIO 模塊適用於 NetCDF 和 HDF 文件。 這會將data放入一個 numpy 數組中:

import Nio

f = Nio.open_file(file, format="netcdf")
data = f.variables['MergedReflectivityQCComposite'][:]
f.close()

在 ndfCDF 文件上測試您的代碼與 PyNIO 代碼,我得出 PyNIO 為 1.1 秒,而 netCDF4 模塊為 3.1 秒。 您的結果可能會有所不同; 不過值得一看。

你可以使用 xarray 。

%matplotlib inline 
import xarray as xr

### Single netcdf file ###
ds =  xr.open_dataset('path/file.nc')

### Opening multiple NetCDF files and concatenating them by time ####
ds = xr.open_mfdatset('path/*.nc', concat_dim='time

要讀取變量,您只需鍵入ds.MergedReflectivityQCCompositeds.['MergedReflectivityQCComposite'][:]

您也可以使用xr.load_dataset但我發現它比 open 函數占用更多空間。 對於xr.open_mfdataset ,如果xr.open_mfdataset ,您還可以沿着文件的維度分塊。 這兩個函數還有其他選項,您可能有興趣在 xarray 文檔中了解更多相關信息。

暫無
暫無

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

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