Python xarray/panda在多个网格点上评估函数



我试图在240x262网格的所有网格点上评估函数,但这需要一些优化。我是Python的新手;通常,我只会在所有网格点上使用for循环,并在每个点逐一评估函数。但是,当然,可以想到一个更好的方法来使用python,我已经尝试了很多事情,但都没有成功:-(我希望有人能帮助我或让我走上正轨。

下面是我本可以使用的代码示例,但函数太复杂,无法在合理的时间内完成。所以我有两个问题:

  1. 在评估这个数组时,有比使用for循环更好的方法吗
  2. 我不需要在所有网格点上评估函数。我可以使用NaN轻松地屏蔽它吗?这样,该函数只在非NaN网格点上使用,而不会实际进入该网格点(即使用for循环(。X和Y只是1D(时间轴(阵列,没有什么特别的,来自于dt X nlat X mlon 3D阵列。也许你也可以直接生成一个插入3D字段的函数
nlat = 240
mlon = 262
A = np.zeros([nlat,mlon])
for i in np.arange(0,nlat-1):
for j in np.arange(0,mlon-1):
A[i,j] = function(x,y)


df = xr.DataArray(A)
df.to_netcdf('A.nc')

谢谢!

在进入xarray之前,您应该从基础开始学习numpy。

import numpy as np
import xarray as xr
def function(x, y):
return x - y
x = np.random.rand(240, 1)
y = np.random.rand(262)
df = xr.DataArray(np.vectorize(function)(x, y))

可能还有其他更有效的方法,但你可以在numpy中对函数进行矢量化,然后将数组提供给它。由于你希望它们变成2D,你需要将其中一个列设置为垂直列(如果你不能用这种方式创建,你可以使用np.reshape(。

您将得到一个numpy数组作为结果,并可以使用它来创建一个xr DataArray。

最新更新