python - 如何在 Python 中以高效的方式从数千个大型 NetCDF 文件中提取数据?
问题描述
我有一个包含天气数据的大约 500x1000 点的网格。每个 NetCDF 文件包含一天的数据,而我有几年的数据。我要提取的是每点所有时间的所有天气数据。所以基本上我想将数据分成 500000 个文件,每个文件都有一个点的数据。
就性能而言,哪种方法是最好的?
我尝试将所有 NetCDF 文件加入一个巨大的 NetCDF 文件(大约 400 GB 大)。然后用 xarray 读入并尝试将每个点拆分为一个文件。每点大约需要 30 分钟,所以我正在寻找更快的解决方案。
import xarray as xr
dataset = xr.open_dataset(big_nc_path)
selected_data = dataset.isel(x=12, y=17)
dataframe = selected_data.to_dataframe()
dataframe.to_csv(file_path)
更新1:
我现在将文件减少到一年,以便于测试。似乎这在很大程度上是一个 IO 问题,因为我在外部硬盘驱动器上有大文件。现在我把它移到了我的 SSD 上,它的速度要快得多。
当年度文件在外部硬盘驱动器上时提取一个 x,y 组合的时间:10 分 40 秒。
年度文件在 SSD 上时提取一个 x,y 组合的时间:20 秒。
不过仍然对改进感兴趣:) 我在这里发布了 nc_dump -hs 的输出: https ://gist.github.com/robban/fd8f1b0e3228c0b80e93772976dc638a
解决方案
推荐阅读
- python - Python 3 Django Rest Framework - 如何向这个 M-1-M 模型结构添加自定义管理器?
- linux - 如何在 awk 命令中将文本打印到文件?
- sql - tSQL 聚合函数和分组依据
- android - 从文件中读取值并放入 Flutter 中的 ListView
- internet-explorer - 登录网站并触发按钮
- ubuntu - 木偶代理没有启动,也没有证书请求,如何解决这个问题?
- algorithm - 寻找算法下界的决策树
- jboss6.x - 如何在 jboss eap 6.4 中设置像 X-XSS-Protection 这样的 http 标头?
- android - 如何在android studio中的特定时间之前设置闹钟?
- flutter - 如何减小按钮的宽度并将其放在中心