加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 如何快速索引NetCDF文件

发布时间:2020-12-20 11:03:46 所属栏目:Python 来源:网络整理
导读:所以我试图索引NetCDF文件以获取某个网格单元格中的流量数据.我使用的NetCDF文件具有以下特征: class 'netCDF4._netCDF4.Dataset'root group (NETCDF3_CLASSIC data model,file format NETCDF3):CDI: Climate Data Interface version 1.6.4 (http://code.zm
所以我试图索引NetCDF文件以获取某个网格单元格中的流量数据.我使用的NetCDF文件具有以下特征:

<class 'netCDF4._netCDF4.Dataset'>
root group (NETCDF3_CLASSIC data model,file format NETCDF3):
CDI: Climate Data Interface version 1.6.4 (http://code.zmaw.de/projects/cdi)
Conventions: CF-1.4
dimensions(sizes): lon(3600),lat(1800),time(31)
variables(dimensions): float64 lon(lon),float64 lat(lat),float64 time(time),float32 dis(time,lat,lon)

我有35年的这些数据,我正在尝试从单个网格获取数据并创建一个时间序列来比较它做不同模型的预测.我目前用于从网格单元格中提取数据的代码如下所示.

from netCDF4 import Dataset
import numpy as np

root_grp = Dataset(r'C:UserswadearDesktopERAIland_daily_dis_198001.nc')
dis = root_grp.variables['dis']
lat = np.round(root_grp.variables['lat'][:],decimals=2).tolist()
lon = np.round(root_grp.variables['lon'][:],decimals=2).tolist()
time = root_grp.variables['time'].shape[0]

lat_index = lat.index(27.95)
lon_index = lon.index(83.55)

for i in range(time):
    print(dis[i][lat_index][lon_index])

现在这感觉非常慢,并且需要很长时间才能在35年的时间内完成这项工作,并且在执行多个不同的网格单元时,所需??的时间将真正增加.

是否有工具通过更快的I / O或索引来加速此过程?

谢谢!

解决方法

如果你随着时间的推移删除循环并立即访问整个时间序列,你应该节省大量时间,即

dis[:,lat_index,lon_index]

如果在时间维度中应用分块,则可以获得进一步的速度增益.查找nccopy的文档.如果您需要重复访问时间序列,这是值得的.您可能希望在分块之前连接一些NetCDF文件,例如每月 – >年度.这是使用ncrcat实用程序完成的.

另见Chunking Data: Why it Matters.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读