【发布时间】:2014-10-20 15:50:58
【问题描述】:
所以,我有一些来自 .nc 文件的变量,它们位于 4D 数组 (x,y,z,t) 中。问题是,z 坐标不像 x 和 y 坐标那样均匀分布,即 z 大约为 25 米、75m、125、175、...、500、600、700、...、20000, 21000, 22000。我正在尝试对数据进行线性插值,以在整个 z 中获得均匀的 50m 间距。但是 R 中的 approx 函数工作得太慢(我认为数组太大了):
library(ncdf)
x = get.var.ncdf(nc,'x'); y = get.var.ncdf(nc,'y'); z = get.var.ncdf(nc,'z')
t = get.var.ncdf(nc,'t') # time
qc1 = get.var.ncdf(nc,'qc',start=c(1,1,1,1),count=c(-1,-1,-1,-1))
zlin = seq(z[1],z[length(z)],50)
qc1_lin = array(0,c(length(x),length(y),length(zlin),length(t)))
for (i in 1:length(x)) {
for (j in 1:length(y)) {
for (k in 1:length(t)) {
qc1_lin[i,j,,k] = approx(z,qc1[i,j,,k],xout = zlin)
}
}
}
有没有办法更快地做到这一点?或者,有人告诉我研究重新划分数据以使这更容易,但我不太确定他的意思。有人能帮我吗?谢谢。
【问题讨论】:
-
您需要处理所有关卡吗?因为在我看来,你想要达到的目标没有意义。
-
是的,我需要所有关卡。简而言之,我正在做的是跟踪云和云顶,并保存在 z 中跨越 4 公里的数据矩阵。由于 z 坐标在地面附近更紧密地排列,这将导致矩阵大小不同(对于靠近地面的云,z 可能需要 60 个点,但对于 z 较高的云,只需要 40 个点)。
标签: r interpolation netcdf r-grid cdo-climate