【发布时间】:2020-09-30 03:40:53
【问题描述】:
最终,我想计算模拟空气质量和测量空气质量之间的差异。 我有两个 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 的增量来分隔。
感觉这应该是直截了当的:获取纬度/经度范围内的 obs 数据(例如 50.5 到 51°N 和 8.1 到 8.2°E),然后从相同纬度/经度范围内的模型数据中减去它。
起初我尝试使用 numpy 改编自 this example 计算“与全球温度的偏差”。但我总是陷入死胡同。
然后,我尝试了无数种类似的东西(这显然是错误的,但我不是编码专家):
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 改编自 this example。 Xarray 将允许使用 method='nearest' 和 tolerance = 0.1 函数,这将有助于处理不匹配的纬度/经度数据(据我所知)。
但是在加载了两个 netcdf 文件后,我什至找不到如何继续代码的入口点。另外,我可能不得不重塑(但如何?)模型数据以匹配观察结果。或者从同一个模型网格中减去观测数据,如果多个观测点落在同一个网格内。
PS:这个问题最终和my other question有关,大概是同一个数据和问题。
【问题讨论】:
-
你的模型和观测数据的格式是什么?您可以将它们放入相应的numpy数组中吗?如果是这样,就这样做,比较容易。此外,您说您“一直陷入死胡同”——了解这些死胡同以及任何相应的错误消息是什么会有所帮助
-
@David 我不完全确定您所说的格式是什么意思。我已经在a related question 中描述了数据,也许这有帮助?
xarray有一个 to array 函数。我认为这可以按照您的建议“将它们放入相应的 numpy 数组”?
标签: python numpy netcdf python-xarray cdo-climate