在Z维度上的一个数组与另一个数组相加或相减,其中纬度(Y维度)和经度(X)是不同的。

问题描述 投票:0回答:1

最终,我想计算模拟的空气质量和测量的空气质量之间的差异。我有两个netcdf文件。第一个(A)包含了一个纬度(y1)索引长度为100,经度(x1)索引长度为200的模型的空气颗粒数据。我想从这个A中减去纬度(y2)索引长度为1300,经度(x2)索引长度为1300的观测数据(B)。B的实际纬度值(以北纬和东经为单位)在A中是存在的,不过并不完全一样,即A中的值是均匀分布的(如55.95°、55.85°、55.75°等),但B中的值有3个小数,且间隔的变化增量大致为0.001到0.003。

感觉这应该是很直接的:把一个纬线范围内的观测数据(如50.5~51°N,8.1~8.2°E),从同一纬线范围内的模型数据中减去。

一开始我尝试用 numpy 改编自 本例 的计算'偏离全球温度'。但是,我一直遇到死胡同。

然后,我尝试了无数种类似于这样的变化(这显然是错误的,但我不是编码奇才)。

anomaly=[]
for j in range(len(100)):
    for k in range(len(200)):
        for i in range(len(1300)):
            if latitude_model[j] == latitude_observation[i] and longitude_model[k] == longitude_observation[i]:
                departure = model_data[0,0,j,k] - observation_data[i,i] #the first two dimensions of the model data are 'time' and 'level'
                anomaly = np.append(departure)

我的第三个方法是 xarray 改编自 本例. Xarray将允许使用 method='nearest'tolerance = 0.1 函数,这将有助于处理不匹配的latlon数据(据我了解)。但是加载了两个netcdf文件后,我甚至找不到如何继续代码的入口点。另外,我可能要重塑(但如何重塑?)模型数据来匹配观测数据。或者从同一个模型网格中减去观测数据,如果几个观测点落在同一个网格内。

PS:这个问题最终与 我的另一个问题,这是差不多的数据和问题。

python numpy netcdf python-xarray
1个回答
1
投票

当计算模型和观测数据之间的偏差时,重要的是在进行分析之前匹配网格。换句话说,预处理总是必须的。所以,在减去两个文件之前,你必须将模型的网格与观测的网格进行匹配,或者反之,否则,你的输出将因为差异而毫无意义。最简单的方法是使用特殊的运算符,如CDO、NCO、NCL等。

在你的命令行中 (虽然 CDO 在 Python 中也可以使用,但需要的语法与下面不同)

### Match the grids ###
cdo remapbil,obs.nc model.nc model1.nc

### Subtract the files ###
cdo sub model1.nc obs.nc bias.nc

然后你可以很容易地在Python中映射出差异。我更喜欢这种方法,只是因为它比在Python中预处理数据更简单、更轻便。

(由智能手机发送)


1
投票

如果你想用Python来做这件事(需要安装CDO作为后台),你可以使用我的包nctoolkit (https:/nctoolkit.readthedocs.ioenlatestinstalling.html。).

所以,如果你的两个文件分别命名为file1和file2。你将首先把它们作为数据集读进去。

将 nctoolkit 导入为 nc

data1 = nc.open_data(file1)

data2 = nc.open_data(file2)

然后,你可以对第一个数据集进行重新网格化,使其具有与第一个数据集相同的网格。这对单元格的匹配是必要的。

data1.regrid(data2)

你可以直接从第一个数据集中减去第二个数据集。

data1.sub(data2)

如果你想把它转换成一个xarray对象,你可以这样做。

d1_xr = data1.to_xarray()

或者如果你想要一个pandas数据框架,可以这样做。

d1_df = data1.to_dataframe()

还有一种自动绘图的方法,使用holoviews。

df1_df.plot()

© www.soinside.com 2019 - 2024. All rights reserved.