gpt4 book ai didi

python - 如何快速索引 NetCDF 文件

转载 作者:太空宇宙 更新时间:2023-11-03 13:29:20 28 4
gpt4 key购买 nike

所以我试图索引一个 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:\Users\wadear\Desktop\ERAIland_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 .

关于python - 如何快速索引 NetCDF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49762136/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com