Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中时间序列的二维网格插值_Python_Scipy_Spatial Interpolation_Python Xarray - Fatal编程技术网

python中时间序列的二维网格插值

python中时间序列的二维网格插值,python,scipy,spatial-interpolation,python-xarray,Python,Scipy,Spatial Interpolation,Python Xarray,我正在处理来自netCDF文件的气候数据。来自不同模型的数据具有不同的分辨率-因此,有必要将模型“重新划分”为公共网格分辨率。数据是三维的(时间、纬度、经度)。为了重新网格化,我在每个时间步将旧网格线性插值到新网格上 我正在寻找一种方法来提高循环通过每个时间步的过程的效率,因为scipy.interpolate.interp2d一次只能处理两个维度 是否有任何方法可以有效地在时间序列的两个维度上线性重新栅格/插值,而无需对循环执行(如下所示) *注意:我使用numpy memmaps将文件写入磁

我正在处理来自netCDF文件的气候数据。来自不同模型的数据具有不同的分辨率-因此,有必要将模型“重新划分”为公共网格分辨率。数据是三维的(时间、纬度、经度)。为了重新网格化,我在每个时间步将旧网格线性插值到新网格上

我正在寻找一种方法来提高循环通过每个时间步的过程的效率,因为
scipy.interpolate.interp2d
一次只能处理两个维度

是否有任何方法可以有效地在时间序列的两个维度上线性重新栅格/插值,而无需对循环执行
(如下所示)


*注意:我使用numpy memmaps将文件写入磁盘和从磁盘写入,因为它们通常太大而无法在内存中处理,而使用xarray dataarray来处理netCDF文件。

我认为不可能避免循环,但因为您的网格在(lon,lat)中是规则的您可以按照建议使用更快的
矩形双变量样条线

此外,
xarray
还添加了一层代码不使用的索引,这可能会不必要地降低速度。特别是,如果您的数据存储在文件
xarray
中,则只有在被要求读取数据时,才会将其读出

例如,您可以执行以下操作:

并将索引循环替换为:

对于枚举中的t,z(z_old):
#z是2d数组,但不确定此循环是否快得多
另外,仅供参考,您可以使用它来加快速度

该工具中有一个
reglid()
方法,可帮助插值到新网格上,而无需手动循环时间片。可以为函数指定要插值到的目标栅格:

var1_regrid = var1.regrid(ref_var.getGrid())
var2_regrid = var2.regrid(ref_var.getGrid())
var3_regrid = var3.regrid(ref_var.getGrid())
因此,可以将它们放入如下计算中:

diff = var1_regrid - ref_var
var1_regrid = var1.regrid(ref_var.getGrid())
var2_regrid = var2.regrid(ref_var.getGrid())
var3_regrid = var3.regrid(ref_var.getGrid())
diff = var1_regrid - ref_var