微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Python xarray/pandas 在多个网格点评估函数

我正在尝试在 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。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。