gpt4 book ai didi

r - 使用 ncdf4::ncvar_get 时如何指定维度顺序?

转载 作者:行者123 更新时间:2023-12-02 19:35:24 25 4
gpt4 key购买 nike

根据上一个问题 ( Faster reading of time series from netCDF? ),我重新排列了我的 netCDF 文件以提供快速时间序列读取 ( scripts on github to be cleaned up eventually ... )。

简而言之,为了加快读取速度,我将维度从 lat, lon, time 重新排列为 time, lat, lon。现在,我现有的脚本崩溃了,因为它们假设尺寸始终为 lat、lon、time,遵循 ncvar_get 的 ncdf4 文档,对于“start”参数:

Order is X-Y-Z-T (i.e., the time dimension is last)

然而,事实并非如此。

此外,通过命令行 netCDF 实用程序 ncdump -h 和 R 函数 ncdf4::nc_open 列出的变量顺序也存在相关的不一致。第一个表示维度按预期(纬度、经度、时间)顺序排列,而后者则首先看到时间顺序的维度(时间、纬度、经度)。

作为一个最小的示例,请下载文件 test.nc并运行

bash-$ ncdump -h .nc
bash-$ R
R> library(ncdf4)
R> print(nc_open("test.nc")

我想要做的是从变量“lwdown”获取记录5-15

my.nc <- nc_open("test.nc")

但这不起作用,因为 R 首先看到时间维度,所以我必须将脚本更改为

ncvar_get(my.nc, "lwdown", start = c(5, 1, 1), count = c(10, 1, 1))

更新我的脚本和函数也不错,只是我希望能够从文件中读取数据,而不管维度顺序如何。

除了有没有办法概括这个函数,使其独立于维度顺序工作?

最佳答案

在提出问题时,我想出了这个解决方案,尽管仍有改进的空间:

我能得到的最接近的是打开文件并以这种方式查找顺序:

my.nc$var$lwdown$dim[[1]]$name
[1] "time"
my.nc$var$lwdown$dim[[2]]$name
[1] "lon"
my.nc$var$lwdown$dim[[3]]$name
[1] "lat"

这有点令人不满意,尽管它引导我找到了这个解决方案:

如果我想从 c(lat = 1, lon = 1, time = 5) 开始,但 ncvar_get 需要任意顺序,我可以说“

start <- c(lat = 1, lon = 1, time = 5)
count <- c(lat = 1, lon = 1, time = 10)
dim.order <- sapply(my.nc$var$lwdown$dim, function(x) x$name)

ncvar_get(my.nc, "lwdown", start = start[dim.order], count = count[dim.order])

关于r - 使用 ncdf4::ncvar_get 时如何指定维度顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22944707/

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